udp通讯问题,用了两个recvfrom函数,响应慢

dsp开发多核主板,嵌入sysbios操作系统,与两路网络终端通讯,同时用了两个recvfrom函数,当外部终端发命令时,主板响应时间超慢,达到2秒左右,不知何故,请高手指点,谢谢

1个回答

不懂dsp和sysbios,但是你用2个recvfrom是阻塞的还是非阻塞的?如果是阻塞的很可能是第一个收到了包第二个阻塞了,直到来了第二个包接收了返回。如果不是这种情况那只能是内核响应有问题,重编个内核或者改下环境

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C++ 中的sendTo和recvFrom函数问题
请看代码,addrClient不赋值recvfrom依然可以收到另一个电脑发送的数据;sendto也能发送数据到另一个电脑,为什么????? ``` WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested=MAKEWORD(2,2); err = WSAStartup(wVersionRequested, &wsaData); if (err != 0) { return; } if (LOBYTE(wsaData.wVersion)!=2 || HIBYTE(wsaData.wVersion)!=2) { WSACleanup(); return; } SOCKET sockSrv=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP); SOCKADDR_IN addrSrv; // addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY); addrSrv.sin_addr.S_un.S_addr=inet_addr("192.168.1.253"); addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(6000); bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); SOCKADDR_IN addrClient;//addrClient不赋值依然可以收到和发送数据,为什么????? // memset(&addrClient, 0, sizeof(addrClient)); // addrClient.sin_addr.S_un.S_addr=inet_addr("192.168.1.46"); // addrClient.sin_family=AF_INET; // addrClient.sin_port=htons(8080); int len=sizeof(SOCKADDR); char recvBuf[100]; int count = recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&addrClient,&len); sendto(sockSrv,"nullptr", strlen("nullptr")+1, 0, (SOCKADDR*)&addrClient,len); for(int i = 0; i < count; i++) printf("%d\n",recvBuf[i]); closesocket(sockSrv); WSACleanup(); ```
套接字使用recvfrom函数时为什么10014或者10039
不知道什么问题 只创建了一个用于接收的套接字,在新的线程里接收的时候并不阻塞并且WSAGETLASTERROR返回10039 在主界面线程中接收的时候返回10014 ------------------------- 传了一下度盘 https://pan.baidu.com/s/1qZcwd4K MFC界面下的工程,错的糊里糊涂也不知道是发生了啥
Linux下socket通信函数原型玄机?(UDP)
编写UDP通讯的程序时发现: ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen); ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen); 两个相关的函数,一收一发,为毛线最后一个参数同为sockaddr的socklen_t类型,一个要传递变量,一个要传递变量指针进去?为何不统一呢?其中有何玄机?
socket编程实现UDP广播的问题
用socket实现UDP的广播时,sendto函数发送广播消息正常,但是其他vxsim的recvfrom函数未被调用,也就是说广播消息发出去了,但是其他vxsim都未接收到,这是怎回事?
TCP、UDP通信:recv和recvfrom同时阻塞
当客户端登录时,创建一个线程接收服务器的消息(比如,密码错误时,服务器会发送消息告知客户端密码错误)。 DWORD Client_Thread() { .... recv(); //接收服务器的消息,如密码是否正确,或者某一个客户端的地址和端口号等 .... } 服务器为每一个客户端创建一个线程(该线程可以判断密码是否正确)。 DWORD Server_Thread() { ... recv(); //接收客户端的消息,如账号和密码,请求朋友的地址和端口号 ... ... send(); //发送相关信息给客户端,如朋友的地址和端口号 ... } 现在的情况是,客户端如果想跟他的其中一个好友聊天,那么就向服务器发送消息, 要求服务器返回该好友的ip地址和端口号,同时客户端又新建一个线程接收好友的信息。 DWORD Chat_Thread() { while(1) { revcfrom(); //接收好友的信息 } } 客户端发送消息给好友使用UDP协议。 void Send() { ... sendto(); //发送信息给好友 } 现在的问题是,客户端的Cient_Thread线程函数中的recv和Chat_Thread线程函数中的recvfrom同时处于阻塞状态。 当朋友发送信息时,recv收到了信息,而recvfrom没有收到。 我想要的是recvfrom收到,recv不接收。有什么办法可以实现这样的功能吗?或者怎样改?谢谢!!!!
udp 组播 recvfrom 不反回
编译好以后 win7 win8.1 测试正常 win2012 系统里面 收不到信息 recvfrom 不反回
windows下udp通信,我想传输int型数据数组,而不是char字符数组,怎么传输啊?
似乎sendto函数和recvfrom函数在windows下只能传输char数据或数组,对于int数据或是其他类型数据或结构体都不能传输,这个问题怎么解决啊?我想传输int型数组啊。。 ​linux下可是什么类型都能传输啊。。。 下面是发送函数sendto和接受函数recvfrom的定义: C++系统声明 int PASCAL FAR sendto ( IN SOCKET s, IN const char FAR * buf, IN int len, IN int flags, IN const struct sockaddr FAR *to, IN int tolen); recvfrom函数(经socket接收数据): 函数原型:ssize_t recvfrom(int sockfd,void *buf,int len,unsigned int flags, struct sockaddr *from,socket_t *fromlen); 求大神赐教,弄了一周也没弄出个好的方法。。
设置接收超时的两种方法:select与setsockopt的问题
在udp编程中,我要调用recvfrom接收数据。我尝试使用了两种设置接收超时的办法: 1)使用select函数;2)使用setsockopt函数。 服务器和客户端的流程是这样的:客户端向服务器发送数据,并使用recvfrom等待数据(分别使用两种方法设置超时);服务器收到数据后,sleep一段时间,向客户端回复数据。 **问题在这儿:**使用select函数时,两端的超时能对得上,也就是说,如果客户端设3s超时,服务器sleep 3s以下,则客户端可以收到服务器的数据,服务器sleep 3s以上就不行了。但使用setsockopt函数时,如果客户端设置3s超时,服务器sleep **3.5s**以下,客户端都能收到服务器的数据,客户端不应该已经超时了吗?我想问这多出来的0.5s该怎么解释?
通过gevent实现UDP多任务出现的问题。
在运行代码时,如果控制台上一直不输入内容,那么从网络调试器发送过来的消息就会一直堵着而不会打印出来,只有等控制台向网络调试器发送消息后堵着的消息才会全部显示,这是为什么呢?本人小白,请大侠指教。。。谢谢啦。。。 ``` import socket import gevent from gevent import monkey monkey.patch_all() def recv(udp_socket): while True: recv_data= udp_socket.recvfrom(1024) print(recv_data[1],":",recv_data[0].decode("utf-8")) def send(udp_socket,client_addr): while True: send_data= input("请输入要发送的消息:") gevent.sleep(5) udp_socket.sendto(send_data.encode("utf-8"),client_addr) def main(): udp_socket= socket.socket(socket.AF_INET,socket.SOCK_DGRAM) client_addr= ("127.0.0.1",7788) udp_socket.bind(("127.0.0.1",8080)) g1=gevent.spawn(recv,udp_socket) g2=gevent.spawn(send,udp_socket,client_addr) gevent.joinall([g1,g2]) udp_socket.close() if __name__ == "__main__": main() ```
用多线程可以实现UDP多任务,今天尝试引用多进程实现UDP多任务时却报错 EOFError: EOF when reading a line 这是怎么回事呢?
import socket import multiprocessing def recv(udp_socket): while True: recv_data= udp_socket.recvfrom(1024) print(recv_data[1],":",recv_data[0].decode("utf-8")) def send(udp_socket,client_addr): while True: send_data= input("请输入要发送的消息:") udp_socket.sendto(send_data.encode("utf-8"),client_addr) def main(): udp_socket= socket.socket(socket.AF_INET,socket.SOCK_DGRAM) client_addr= ("127.0.0.1",7788) udp_socket.bind(("127.0.0.1",8080)) p1=multiprocessing.Process(target=recv,args=(udp_socket,)) p2=multiprocessing.Process(target=send,args=(udp_socket,client_addr)) p1.start() p2.start() p1.join() p2.join() udp_socket.close() if __name__ == "__main__": main()
linux c写了一个UDP服务器,然后通过网络助手做作为客户端,UDP无法接收到数据
#include <sys/types.h> #include <sys/socket.h> #include<pthread.h> #include <netinet/in.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include<arpa/inet.h> //#include<cstdlib.h> char* PORT="5588"; //server's port char* SOCKET_SERVER_IP="192.168.1.105"; // int main() { printf("Welcome! This is a UDP server, I can only received message from client and reply with same message\n"); struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(atoi(PORT)); addr.sin_addr.s_addr = htonl(INADDR_ANY); int sock; if ( (sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { perror("socket"); exit(1); } //port bind to server if (bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0) { perror("bind"); exit(1); } char buff[512]; struct sockaddr_in clientAddr; memset(&clientAddr,0,sizeof(clientAddr)); size_t n; socklen_t len = sizeof(clientAddr); while (1) { n = recvfrom(sock, buff, 511, 0, (struct sockaddr*)&clientAddr, &len); if (n>0) { buff[n] = 0; printf("%s %u says: %s\n", inet_ntoa(clientAddr.sin_addr), ntohs(clientAddr.sin_port), buff); n = sendto(sock, buff, n, 0, (struct sockaddr *)&clientAddr, sizeof(clientAddr)); if (n < 0) { perror("sendto"); break; } } else { perror("recv"); break; } } return 0; } 然后网络助手设置如下,防火墙那些都关闭了。![图片说明](https://img-ask.csdn.net/upload/201911/22/1574436191_472978.png)![图片说明](https://img-ask.csdn.net/upload/201911/22/1574436199_451099.png)![图片说明](https://img-ask.csdn.net/upload/201911/22/1574436203_191706.png) 很奇怪,为何服务器会收不到网络助手发的数据,求解啊。卡了2天了
Linux平台C语言关于UDP广播的问题。
首先,我写了一个非常简单的UDP服务端,我看了看,是IP地址写的问题,(下面详细代码), 当我有inet_addr("192.168.152.128")的时候,是不能成功收到信息的,但我用 htonl(INADDR_ANY)的时候,却是可以收到信息,为什么?(我的客户端是用广播地址:192.168.152.255) ``` #include"myhead.h" char rbuf[50]; char wbuf[50]; int main() { int udp,size,len,opt=1; struct sockaddr_in laddr; struct sockaddr_in raddr; laddr.sin_family = AF_INET; laddr.sin_port = htons(8888); laddr.sin_addr.s_addr = inet_addr("192.168.152.128");//疑惑在这里 size = sizeof(struct sockaddr_in); udp = socket(AF_INET,SOCK_DGRAM,0); setsockopt(udp,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof opt); bind(udp,(struct sockaddr*)&laddr,size); len=sizeof(struct sockaddr); while(1) { recvfrom(udp,rbuf,50,0,(struct sockaddr*)&raddr,&len); printf("%s\n",rbuf); bzero(rbuf,50); } } ```
C#里用socket收发udp数据的问题
一:用udp收发数据,为什么接收方要发一帧数之后才能接收到数据? private Socket SetupUdpSocketObject(string localIp, string localPort, string remoteIp, string remotePort) { //得到本机IP,设置TCP端口号 var ip = new IPEndPoint(IPAddress.Parse(localIp), int.Parse(localPort)); var ret = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); //绑定网络地址 ret.Bind(ip); var sender = new IPEndPoint(IPAddress.Any, 0); _remote = sender; EndPoint point = new IPEndPoint(IPAddress.Parse(remoteIp), int.Parse(remotePort)); ret.SendTo(new byte[] { 1, 2, 3 }, point); //发送一帧数据才能收到数据 return ret; } private void ProcessUdpData() { while (true) { var data = new byte[DataMaximumLength]; //发送接受信息 var recv = _udpSocket.ReceiveFrom(data, ref _remote); _recorder.RecordBytes(data, 0, recv); //记录数据 var cell = new AzimuthCell(data); NotifyAllObservers(cell); //发送通知 } } 如果不写ret.SendTo(new byte[] { 1, 2, 3 }, point); 就收不到数据。 二:socket接收和发送数据我都是用线程发送,一个while(true)循环,反复sendto发缓存区,反复recvfrom,但是这样两个线程的占用率很高,有没有其他办法收发数据,除了beginsendto和beginrecvfrom
vxworks 下workbench3.3 上实现udp 通信 只能发送,不能接收的问题?
我是在VMware 上装的xp ,之后在xp 上安装的workbench3.3 。 需要用C++ 编写一个类,实现udp socket 通信,自己编写的程序是实现服务器功能,和TCP&UDP测试工具进行通信,自己的程序只能给测试工具发送消息,接收进程一直显示pend .自己编写的程序和TCP&UDP测试工具都是在此虚拟机安装的XP上运行的。 代码类大概如下: class Socket{ public: Socket(); recvmes(){int nev = recvfrom();} ........ }; 有没有知道这方面的大神给个建议。指导一下。
有关ege和udp的问题,新手求大神,
我做的udp文件传输,在dos界面下服务端可以接收到来自客户端的文件,但我加上ege界面之后,发现服务端收不到了 这个是dos界面的服务端的接收函数 int file() { int err = INVALID_VALUE32; WORD ver; WSADATA wsaData; int result; ver = MAKEWORD(2, 2); err = WSAStartup(ver, &wsaData); if (err != 0) { return 0; } if ((LOBYTE(wsaData.wVersion) != 2) || (HIBYTE(wsaData.wVersion) != 2)) { WSACleanup(); return 0; } sockSc = socket(AF_INET, SOCK_DGRAM, 0); SOCKADDR_IN addrSc; addrSc.sin_addr.S_un.S_addr = htonl(INADDR_ANY);; addrSc.sin_family = AF_INET; addrSc.sin_port = htons(7861); result=bind(sockSc, (SOCKADDR*)&addrSc, sizeof(SOCKADDR)); DWORD ID; HANDLE handle=CreateThread(NULL,0,recvfunc,0,0,&ID); while(recvexi<2) { Sleep(100); } printf("退出成功\n"); return 0; } char TcharToChar(const TCHAR *tchar,char *_char) { int ilength; ilength = WideCharToMultiByte(CP_ACP,0,tchar,-1,NULL,0,NULL,NULL); WideCharToMultiByte(CP_ACP,0,tchar,-1,_char,ilength,NULL,NULL); return *_char; }//WCHAR到char类型的转换 DWORD WINAPI recvfunc(LPVOID lpParam) { recvexi=1; FILE *p; char name[5200]; char name1[5200]; getchar(); printf("请输入你想要接收的文件路径:\n"); gets_s(name); fopen_s(&p,name,"wb"); while(recvexi==1) { int rec=recvfrom(sockSc,(char *)(&data),2048,0,(sockaddr*)&server,&lenth); if(rec>0) { if(data.head.id=id) { fwrite(data.buf,sizeof(char),data.bufsize,p); recvsize=recvsize+data.bufsize; filesize = data.head.size; datahead.id = data.head.id; datahead.recvsize = recvsize; datahead.size = filesize; int d = sendto(sockSc,(char*)(&datahead), sizeof(datahead),0,(sockaddr*)&server,lenth); id = id+1; } else if(data.head.id < id) { datahead.id = data.head.id; datahead.recvsize=recvsize; datahead.size = filesize; int d = sendto(sockSc,(char*)(&datahead), sizeof(datahead),0,(sockaddr*)&server,lenth); } if(filesize == recvsize) { datahead.id=data.head.id; datahead.recvsize=-1; datahead.size=filesize; printf("filesize=%d\n",filesize); printf("recvsize=%d\n",recvsize); printf("文件已经收到了!"); int d=sendto(sockSc,(char*)(&datahead), sizeof(datahead),0,(sockaddr*)&server,lenth); recvexi = 2; system("pause"); break; } } } fclose(p); recvexi = 2; _tsystem(TEXT("pause")); return 0; }//文件接收线程的具体使用 这个是加上ege之后的服务端的文件接收函数 int file()//文件传输函数 { post(); system("pause"); outtextxy(300,300,silePath); int err = INVALID_VALUE32; WORD ver; WSADATA wsaData; int result; ver = MAKEWORD(2, 2); err = WSAStartup(ver, &wsaData);//Windows异步套接字)的启动命令 if ( 0 != err ) // 判断函数返回值 { return 0; } if ( (2 != LOBYTE(wsaData.wVersion))//是取得16进制数最低(最右边)那个字节的内容 || 2 != (HIBYTE(wsaData.wVersion)) )//取得16进制数最高(最左边)那个字节的内容 { WSACleanup(); //中止Windows Sockets在所有线程上的操作 return 0; } sockSc = socket(AF_INET, SOCK_DGRAM, 0); addrSc.sin_addr.S_un.S_addr = htonl(INADDR_ANY); addrSc.sin_family = AF_INET; addrSc.sin_port = htons(7861); result=bind(sockSc, (SOCKADDR*)&addrSc, sizeof(SOCKADDR)); DWORD ID; HANDLE handle = CreateThread(NULL, 0, recvfunc, 0, 0, &ID);//创建文件接收线程 while( 2 > recvexi ) { Sleep(100); } printf("退出成功\n"); return 0; } char TcharToChar(const TCHAR *tchar,char *_char)//WCHAR到CHAR类型的转换 { int ilength; ilength = WideCharToMultiByte(CP_ACP, 0, tchar,-1, NULL, 0, NULL, NULL); WideCharToMultiByte(CP_ACP, 0, tchar, -1, _char, ilength, NULL, NULL); return *_char; } DWORD WINAPI recvfunc(LPVOID lpParam)//文件接收具体线程 { recvexi=1; FILE *p; p = fopen(silePath,"wb"); outtextxy(300,300,silePath); while( 1 == recvexi ) { int rec = recvfrom(sockSc, (char *)(&data), 2048, 0, (sockaddr*)&server, &lenth);//接收到消息 if( 0 < rec ) { if( data.head.id = id ) { fwrite(data.buf, sizeof(char), data.bufsize, p);//二进制流格式写入文件 recvsize = recvsize + data.bufsize; filesize = data.head.size; datahead.id = data.head.id; datahead.recvsize = recvsize; datahead.size = filesize; int d = sendto(sockSc, (char*)(&datahead), sizeof(datahead),0,(sockaddr*)&server,lenth); id = id + 1; } else if( data.head.id < id) { datahead.id = data.head.id; datahead.recvsize=recvsize; datahead.size = filesize; int d = sendto(sockSc, (char*)(&datahead), sizeof(datahead), 0, (sockaddr*)&server, lenth); } if( filesize == recvsize ) { datahead.id = data.head.id; datahead.recvsize =- 1; datahead.size = filesize; char sFile = filesize; char rFile = recvsize; outtextxy(170, 200, "filesize = "); outtextxy(200, 200, sFile); outtextxy(170, 210, "recvsize = "); outtextxy(200, 210, rFile); outtextxy(200, 220, "文件已经收到了!\n"); int d = sendto(sockSc, (char*)(&datahead), sizeof(datahead), 0, (sockaddr*)&server, lenth); recvexi = 2; break; } } } fclose(p); recvexi = 2; _tsystem(TEXT("pause")); return 0; }
按照网上说的unity中使用udp的方法开了线程接受消息,但是接受不到啊?
这是代码,recvfrom一直是阻塞的,确定服务端有回复了,但是就是收不到,这个方法是网上都在转载的unity使用udp的方法。无语了。 ``` using UnityEngine; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; public class UdpHandler : MonoBehaviour { public static UdpHandler instance; /// <summary> /// 目标socket /// </summary> Socket socket; /// <summary> /// 服务端 /// </summary> EndPoint serverEnd; /// <summary> /// 服务端端口 /// </summary> IPEndPoint ipEnd; /// <summary> /// /接收的数据,必须为字节 /// </summary> byte[] recvData = new byte[20]; /// <summary> /// 连接线程 /// </summary> Thread connectThread; void Start() { InitSocket(); instance = this; } /// <summary> /// 初始化 /// </summary> public void InitSocket() { //定义连接的服务器ip和端口,可以是本机ip,局域网,互联网 ipEnd = new IPEndPoint(IPAddress.Parse("192.168.1.105"), 8888); //定义套接字类型,在主线程中定义 socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); //定义服务端 IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); serverEnd = (EndPoint)sender; //开启一个线程连接,必须的,否则主线程卡死 connectThread = new Thread(new ThreadStart(SocketReceive)) { IsBackground = true }; connectThread.Start(); } public void SocketSend(byte[] sendStr) { //发送给指定服务端 socket.SendTo(sendStr, sendStr.Length, SocketFlags.None, ipEnd); } /// <summary> /// 服务器接收 /// </summary> void SocketReceive() { while (true) { recvData = new byte[1024]; socket.ReceiveFrom(recvData, ref serverEnd); SendMessage("MessageReceiveHandler", recvData); } } /// <summary> /// 连接关闭 /// </summary> public void SocketQuit() { //关闭线程 if (connectThread != null) { connectThread.Interrupt(); connectThread.Abort(); } //最后关闭socket if (socket != null) { socket.Close(); } } } ```
通过ubuntu写的udp服务器运行在VM的虚拟机上,然后windos用Netassist却无法发送数据过去,请问是为何啊?
#include <sys/types.h> #include <sys/socket.h> #include <pthread.h> #include <netinet/in.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #define SERV_PORT 5588 int main(int argc, char **argv) { int sock_fd; char rcv_buff[512]; struct sockaddr_in client_addr; struct sockaddr_in server_addr; int client_len; int rcv_num = -1; if ((sock_fd = socket(AF_INET, SOCK_DGRAM,0)) < 0) { perror("socket create error\n"); exit(1); } memset(&server_addr,0,sizeof(struct sockaddr_in)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(SERV_PORT); server_addr.sin_addr.s_addr = htonl(INADDR_ANY); client_len = sizeof(struct sockaddr_in); if (bind(sock_fd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr_in)) < 0) { perror("bind error.\n"); exit(1); } while (1) { rcv_num= recvfrom(sock_fd, rcv_buff, sizeof(rcv_buff), 0, (struct sockaddr*)&client_addr, &client_len); if (rcv_num>0) { rcv_buff[rcv_num] = '\0'; printf("%s %u says: %s\n",inet_ntoa(client_addr.sin_addr),ntohs(client_addr.sin_port),rcv_buff); } else { perror("recv error\n"); break; } } close(sock_fd); return 0; } ![图片说明](https://img-ask.csdn.net/upload/201911/23/1574439219_327602.png)![图片说明](https://img-ask.csdn.net/upload/201911/23/1574439225_93633.png) 麻烦大手帮忙看看代码是有什么问题还是设置上?防火墙那些都已经关闭了
python udp的问题,收不到服务器的返回数据
本来是做个dns解析程序,本地记录找不到的话再向别的服务器请求,但是现在只写了一部分,直接将来自客户端的请求转发给202.106.0.20,但是完全没反应,收不到服务器返回的数据报。求解答 import os import socket import threading #字典,用来存放域名-ip键值对 domain_ip={} #去掉域名字符串最后的换行符 def DelLastChar(str): str_list=list(str) str_list.pop() return "".join(str_list) #从数据报中分离出网址字节码存入list def get_request(your_list): my_list = [] new_list = [] my_list.extend(your_list) re_list = [] thelen = my_list[0] try: while thelen != 0: new_list = new_list + my_list[1:thelen+1] my_list[0:thelen+1] = [] thelen = my_list[0] new_list.append('.') except IndexError: print ("The format of datagram is false!") new_list.pop() return new_list #将网址字节码转换成域名 def digit_to_domian(d_list): length=len(d_list); for index in range(length): if d_list[index]!='.': d_list[index]=chr(d_list[index]) return ''.join(d_list); def make(re_ip,msg): tmp_list = [] for ch in msg: tmp_list.append(ch) tmp_list[4:12] = ['\x00','\x01','\x00','\x01','\x00','\x00','\x00','\x00'] tmp_list = tmp_list+['\xc0','\x0c','\x00','\x01','\x00\ ','\x01','\x00','\x00','\x02','\x58','\x00','\x04'] dive_ip = socket.inet_aton(re_ip) ch_ip = [] for each_ch in dive_ip: ch_ip.append(each_ch) tmp_list = tmp_list + ch_ip re_msg = ''.join(tmp_list) return re_msg #从本地文件读入域名-ip到字典中 data = open('dnsrelay.txt') for each_line in data: domain_ip.setdefault(DelLastChar(each_line.split(' ',1)[-1]),each_line.split(' ',1)[0]) data.close() #监听本地53端口 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.bind(('127.0.0.1', 53)) print('Bind UDP on 53...') while True: data,(client,port) = s.recvfrom(1024) if(port==53): print(data)#this line can not run else: request = [] request = list(data) domain=digit_to_domian(get_request(request[12:])) s.sendto(data,('202.106.0.20',53)) print(domain)
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、PDF搜索网站推荐 对于大部
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
Vue + Spring Boot 项目实战(十四):用户认证方案与完善的访问拦截
本篇文章主要讲解 token、session 等用户认证方案的区别并分析常见误区,以及如何通过前后端的配合实现完善的访问拦截,为下一步权限控制的实现打下基础。
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入  假设现有4个人
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
写在前面: 我是 扬帆向海,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。 这博客是对自己学习的一点点总结及记录,如果您对 Java、算法 感兴趣,可以关注我的动态,我们一起学习。 用知识改变命运,让我们的家人过上更好的生活。 目录一、杨辉三角的介绍二、杨辉三角的算法思想三、代码实现1.第一种写法2.第二种写法 一、杨辉三角的介绍 百度
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
SQL-小白最佳入门sql查询一
一 说明 如果是初学者,建议去网上寻找安装Mysql的文章安装,以及使用navicat连接数据库,以后的示例基本是使用mysql数据库管理系统; 二 准备前提 需要建立一张学生表,列分别是id,名称,年龄,学生信息;本示例中文章篇幅原因SQL注释略; 建表语句: CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // dosho
漫话:什么是平衡(AVL)树?这应该是把AVL树讲的最好的文章了
这篇文章通过对话的形式,由浅入深带你读懂 AVL 树,看完让你保证理解 AVL 树的各种操作,如果觉得不错,别吝啬你的赞哦。 1、若它的左子树不为空,则左子树上所有的节点值都小于它的根节点值。 2、若它的右子树不为空,则右子树上所有的节点值均大于它的根节点值。 3、它的左右子树也分别可以充当为二叉查找树。 例如: 例如,我现在想要查找数值为14的节点。由于二叉查找树的特性,我们可...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,
程序员:我终于知道post和get的区别
IT界知名的程序员曾说:对于那些月薪三万以下,自称IT工程师的码农们,其实我们从来没有把他们归为我们IT工程师的队伍。他们虽然总是以IT工程师自居,但只是他们一厢情愿罢了。 此话一出,不知激起了多少(码农)程序员的愤怒,却又无可奈何,于是码农问程序员。 码农:你知道get和post请求到底有什么区别? 程序员:你看这篇就知道了。 码农:你月薪三万了? 程序员:嗯。 码农:你是怎么做到的? 程序员:
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU
开源并不是你认为的那些事
点击上方蓝字 关注我们开源之道导读所以 ————想要理清开源是什么?先要厘清开源不是什么,名正言顺是句中国的古代成语,概念本身的理解非常之重要。大部分生物多样性的起源,...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
      11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI 算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下
《C++ Primer》学习笔记(六):C++模块设计——函数
专栏C++学习笔记 《C++ Primer》学习笔记/习题答案 总目录 https://blog.csdn.net/TeFuirnever/article/details/100700212 —————————————————————————————————————————————————————— 《C++ Primer》习题参考答案:第6章 - C++模块设计——函数 文章目录专栏C+...
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车? 某胡同口的煎饼摊一年能卖出多少个煎饼? 深圳有多少个产品经理? 一辆公交车里能装下多少个乒乓球? 一
so easy! 10行代码写个"狗屁不通"文章生成器
前几天,GitHub 有个开源项目特别火,只要输入标题就可以生成一篇长长的文章。背后实现代码一定很复杂吧,里面一定有很多高深莫测的机器学习等复杂算法不过,当我看了源代码之后这程序不到50
知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)
知乎高赞:中国有什么拿得出手的开源软件产品? 在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?” 事实上,还不少呢~ 本人于2019.7.6进行了较为全面的 回答 - Bravo Yeung,获得该问题下回答中得最高赞(236赞和1枚专业勋章),对这些受欢迎的 Github 开源项目分类整理如下: 分布式计算、云平台相关工具类 1.SkyWalk
MySQL数据库总结
文章目录一、数据库简介二、MySQL数据类型(5.5版本)三、Sql语句(1)Sql语句简介(2)数据定义语言DDLcreate,alter,drop(3)数据操纵语言DMLupdate,insert,delete(4)数据控制语言DCLgrant,revoke(5)数据查询语言DQLselect(6)分组查询与分页查询group by,limit四、完整性约束(单表)五、多表查询六、MySQL数
相关热词 c# 输入ip c# 乱码 报表 c#选择结构应用基本算法 c# 收到udp包后回包 c#oracle 头文件 c# 序列化对象 自定义 c# tcp 心跳 c# ice连接服务端 c# md5 解密 c# 文字导航控件
立即提问