Tag: udp

如何通过NAT通过公共IP发送UDP数据包?

我有一个在我的专用网络上运行的UDP服务器。我有一个超出NAT的设备,它通过公共IP将UDP数据包发送到我的服务器。 我能够收到UDP数据包,解析它们,我可以查看有效负载,src和dest端口。 现在我需要向该设备发送ACK消息,以便我捕获了ip和端口号并向其发送UDP数据包。 但我无法在该设备中查看任何UDP数据包。 我的问题是因为我的设备超出NAT,我得到的IP地址和端口号是NAT还是实际的设备? 如何通过NAT将UDP数据包发送到该设备?

UDP WinSock – 未接收广播数据包

我正在测试一个简单的套接字设置,其中服务器侦听指定的端口,并且客户端发送应该由该服务器接收的广播数据包。 这种设置在直接发送消息(即不是广播)时工作正常,但是在服务器上从未接收到广播数据包时。 一些代码(为简单起见,删除了错误检查): // Client (broadcast sender) // Create and bind the client socket clientSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); sockaddr_in sockAddr; sockAddr.sin_family = AF_INET; sockAddr.sin_port = htons(5678); sockAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY); bind(clientSocket, (sockaddr*)(&sockAddr), sizeof(sockAddr)); u_long uMode = 1; ioctlsocket(clientSocket, FIONBIO, &uMode); char broadcast = 1; setsockopt(clientSocket, SOL_SOCKET, SO_BROADCAST, &broadcast, sizeof(broadcast)); // … // Send the packet […]

如何使用C程序读取来自端口的UDP数据有效负载

我正在尝试从端口6343捕获UDP数据包。在捕获它时,我还必须捕获有效负载。 我以ASCII格式获取有效载荷。 我必须阅读有效载荷的内容。 以下是我的代码: #include //For standard things #include //malloc #include //memset #include //Provides declarations for icmp header #include //Provides declarations for udp header #include //Provides declarations for tcp header #include //Provides declarations for ip header #include #include #define PORT 6343 void print_udp_packet(unsigned char*, int); void ProcessPacket(unsigned char*, int); void PrintData (unsigned char* , int); […]

使用epoll的多个UDP套接字 – 无法接收数据

我试图使用epoll从多个UDP套接字接收数据。 这是一个测试程序,它没有确切数量的套接字。(为了测试目的,它设置为50.)下面的程序没有收到任何数据,它被卡在epoll_wait(),因为我已经给它-1等待直到得到数据。 但是没有得到任何。 #include #include #include #include #include #include #include #include #include #include #define MAX_CON (50) typedef struct UDPMessage { unsigned short hdr; unsigned short CC1; unsigned short CC2; unsigned char data[1472]; unsigned short CC3; } UDPPacket; static struct epoll_event *events; int create_sockets(unsigned int port); int create_sockets(unsigned int port) { int sock, flag = 1; […]

在从端口6343捕获sflow数据时,UDP报头长度字段始终为零

我试图从端口6343捕获UDP sflow数据。我试图捕获UDP头信息,它提供源端口,目标端口,UDP头长度和校验和。 我能够看到端口捕获,但UDP和校验和字段分别为0和1,这意味着不计算UDP长度,也不计算校验和。 我在这里遗漏了UDP标头长度和校验和计算的内容吗? 以下是我使用的代码: #include //For standard things #include //malloc #include //memset #include //Provides declarations for icmp header #include //Provides declarations for udp header #include //Provides declarations for tcp header #include //Provides declarations for ip header #include #include #define PORT 6343 #define PCKT_LEN 65536 void handlepacket(unsigned char *, int); int sockt; int i,j; struct […]

recvfrom:错误地址,sendto:协议不支持的地址族

我正在尝试在C中实现一个小的UDP服务器/客户端应用程序,并在服务器端出现两个错误: recvfrom:错误的地址 && sendto:协议不支持的地址系列 。 我搜索了这个错误并搜索了答案,但不幸的是,他们并没有真正帮助…也许我正在以错误的方式投射参数并且没有得到它。 我希望你能给我一个提示:)。 #include #include #include #include #include #include #define BUFFSIZE 256 #define IP “127.0.0.1” #define PORT 7755 int main(void){ int socket_fd = socket(AF_INET, SOCK_DGRAM, 0); char buffer[1] = “s”; struct sockaddr_in src_addr; struct sockaddr_in dest_addr; src_addr.sin_family = AF_INET; src_addr.sin_port = htons(PORT); src_addr.sin_addr.s_addr = inet_addr(IP); if(socket_fd==-1) perror(“socket”); if(bind(socket_fd, (struct sockaddr*)&src_addr, sizeof(src_addr))==-1) […]

udp连接套接字上的ICMP“目标不可达”数据包

我用这个函数创建了连接的UDP套接字 /* Creates connected udp socket */ int udp_connect( const char *host, const char *serv) { int sockfd, n; struct addrinfo hints, *res, *ressave; bzero(&hints, sizeof(struct addrinfo)); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_DGRAM; if ( ( n = getaddrinfo( host, serv, &hints, &res)) != 0) err_quit( “udp_connect error for %s, %s: %s”, host, serv, gai_strerror(n)); […]

multithreadingudp服务器

我是最新的线程,如果你可以建议我,请。 我有服务器向客户端广播消息。 然后客户端将回复发送回服务器。 我想使用单独的线程处理每个回复。 每个回复都有mesage id和thread id。 如何从所有线程中使用此信息填充某些结构,然后阅读它 同样来自我的代码,是否正确地创建线程,或者它是否存在以创建线程只是我得到客户端的回复? 我是从正确的理解开始的吗? int main(){ while(1){ sendto on broadcast IP pthread_create(&cln_thread, NULL, msg_processing, (void *) &arg)) } } msg_processing () { recvfrom client msg with id of packet and thread id how to write those informations and then read them in main when program finish } 谢谢

C并发UDP套接字,奇怪的分段错误

我要么非常疲倦而且没有注意到一些简单的事情,或者这完全是在与我联系。 我遇到了一个分段错误(核心转储),我已经设法将它精确定位到worker函数中的sendto()。 (在服务器中) 服务器代码: //UDPServer.c /* * gcc -o server UDPServer.c * ./server */ #include #include #include #include #include #include #include #include void err(char *str) { perror(str); exit(1); } int sock; typedef struct { struct sockaddr_in client; int buffsize; char *msg; } data; void *worker (void* asd) { int len; FILE *fp; data d; d […]

使用win32 API在C中广播UDP套接字

我使用UDP套接字创建了一个客户端服务器应用程序。 应用程序工作正常,因为只有一个服务器和一个客户端。 但现在我想让我的服务器“广播”。 我怎么能这样做? 我一直试图这样做但它在BIND函数中出错并返回错误“10049”。 这是我的代码片段: #define broadcastPort 8888 WSADATA wsa; SOCKET s; //Initialise winsock printf(“\nInitialising Winsock…”); if (WSAStartup(MAKEWORD(2,2),&wsa) != 0) { printf(“Failed. Error Code : %d”,WSAGetLastError()); exit(EXIT_FAILURE); } printf(“Socket Initialised.\n”); //Create a socket if((s = socket(AF_INET , SOCK_DGRAM , IPPROTO_UDP )) == INVALID_SOCKET) { printf(“Could not create socket : %d” , WSAGetLastError()); } printf(“Socket […]