Tag: udp

C服务器和Java客户端之间的UDP连接

我有另一个问题:)我在C中有一个简单的UDP服务器读取一些字节对这些字节应用一些解码,当它有一个forms的字符串### @ #### @ ### @ ### he通过UDP将它发送到C中的另一个服务器。这是我的C服务器的代码,称为preprocesamiento.c我发布整个事情cos是easyer但也许这与我的问题无关。 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define MAXBUF 512 #define SENDING 0x52 #define RESIVING 0xB4 #define TYPE 0xA3F0 int createSocket(); char *unbase64(unsigned char *input, int length); /* This function recives bytes(ASCII numbers) and returns the char */ void […]

发送广播服务器 – >客户端和发送回客户端 – >服务器UDP C套接字

我想询问是否有可能,以及如何从UDP服务器向客户端发送广播,然后从客户端向服务器发回响应。 我需要实现一个应用程序,其中服务器在子网上发送广播 ,客户端应该以某种方式接收该消息,并以这种方式获取服务器地址,以便他们可以将一些消息发送回服务器。 我创建了一个带有指定服务器端口的套接字,例如2000,并将setsockopt设置为SO_BROADCAST并使用sendto发送了一些消息,但我的客户端永远挂起了recvfrom 。 好像它没有从服务器的广播中收到任何东西。 如何解决这个问题? 服务器: struct sockaddr_in addr; int socketfd,t=1; socketfd = socket(PF_INET,SOCK_DGRAM,0); memset(&addr, 0, sizeof(struct sockaddr_in)); addr.sin_family = AF_INET; addr.sin_port = htons(“2000”); addr.sin_addr.s_addr = htonl(INADDR_BROADCAST); if (setsockopt(socketfd, SOL_SOCKET, SO_BROADCAST ,&t, sizeof(t))) ERR(“setsockopt”); if(bind(socketfd,(struct sockaddr*) &addr,sizeof(addr)) < 0) ERR("bind"); char *buf = "HelloFromServer!"; if(sendto(socketfd, buf, strlen(buf), 0, (struct sockaddr *)&addr, sizeof(addr)) <= […]

联网计算机未收到多播

我正在尝试向所有网络计算机发送多播。 我在计算机上安装了服务器,在网络上安装了另一台计算机。 当我发出多播消息时,在我的计算机上运行的服务器可以很好地发送它。 网络计算机虽然没有得到任何东西。 我已经尝试将TTL设置为其最大值,但没有做任何事情。 我也尝试使用WireShark监控我的数据包,但没有看到任何东西(我对此并不熟悉)。 我很困惑为什么我的电脑收到它,而不是其他联网的电脑。 这是我用来发送多播的代码: #include /* for type definitions */ #include /* for win socket API calls */ #include /* for win socket structs */ #include /* for printf() */ #include /* for atoi() */ #include /* for strlen() */ #define MAX_LEN 1024 /* maximum string size to send */ #define […]

实现multithreadingUDP服务器的问题(线程池?)

我正在写一个音频流(客户端 – 服务器)作为我的项目(C / C ++),我决定为这个项目制作一个multithreadingUDP服务器。 这背后的逻辑是每个客户端将在他自己的线程中处理。 我遇到的问题是线程相互干扰。 我的服务器做的第一件事就是创建一种线程池; 它创建了5个线程,所有线程都被recvfrom()函数自动阻止,虽然看起来,在我将多个线程连接到服务器的大多数情况下,多个线程正在响应,之后导致服务器变为完全阻止而不是进一步操作。 调试这个也很困难所以我写这里是为了获得一些关于multithreadingUDP服务器通常实现的建议。 我应该在部分代码中使用互斥锁或信号量吗? 如果是这样,在哪里? 任何想法都会非常有帮助。

UDP – 以块的forms从队列中读取数据

我正在使用UDP(在C中)实现一个小应用程序。 服务器以给定数量的块(例如100字节/调用)向客户端发送来自给定文件的数据。 客户端下载文件并将其保存在某处。 问题是客户端可以接收一个参数,说明要读取/调用多少字节。 我的问题是当服务器发送100字节/调用,并且客户端设置为只读15字节/调用。 其他85个字节丢失,因为消息已从UDP队列中删除。 有没有办法在块中读取这些消息而不将它们从队列中删除,直到它们被完全读取?

select和recvfrom出现意外结果

fd_set rset; struct timeval tv; FD_ZERO(&rset); FD_SET(sockfd, &rset); tv.tv_sec = 1; tv.tv_usec = 0; for(;;) { for(count = 0; count < elements in sockaddr_in array; count++) { //flag_array is filled with -1 before for(;;) if(flag_array[count] == -1 && select(sockfd+1, &rset, NULL, NULL, &tv)) { recvfrom(…) } tv.tv_sec = 1; FD_ZERO(&rset);//this fixed it FD_SET(sockfd, &rset);//and this […]

在不同的机器上运行UDP客户端和服务器

我在同一台计算机上运行时有一个UDP客户端和运行正常的服务器。 (这里为客户端我已经将127.0.0.1作为UDP客户端上的目标IP)。 但是,当在不同的机器上运行,并用我的server.c所在机器的ip替换127.0.0.1时,该程序不起作用。 问题是我没有收到任何错误消息。 以下是服务器和客户端的代码。 请告诉我在不同的机器上运行相同的任何修改(我使用的是LINUX OS)。 注意:我的机器服务器IP (存在server.c的机器): 10.60.5.945 , clientIP:10.60.5.950 server.c: #include #include #include #include #include #include #include #include int main() { int cont,create_socket,new_socket,addrlen,fd; int bufsize = 1024; int nameLen=0; int client_address_size=0; char *buffer = malloc(10); char fname[256]; struct sockaddr_in address,client; if ((create_socket = socket(AF_INET,SOCK_DGRAM,0)) > 0) printf(“The socket was created\n”); address.sin_family = […]

查找UDP数据包的源IP /进程

我在我的C程序中使用recvfrom()来接收来自多个客户端的UDP数据包,这些客户端可以使用自定义用户名登录。 一旦他们登录,我希望他们的用户名与唯一的客户端进程配对,这样服务器就会自动知道用户的来源。 如何从recvfrom()收到的数据包中获取此信息?

C中sendto函数允许的最大缓冲区长度是多少

我正在使用UDP套接字实现一个简单的网络堆栈,我希望从客户端向服务器发送大约1 MB的字符串数据。 但是,我不知道C中UDP sendto() API的长度是否有限制。如果有限制并且sendto()不会处理超出限制的打包,那么我将不得不手动将字符串拆分为较小的块然后发送它们。 缓冲区的长度是否有限制? 或者sendto() API自己处理打包。 任何见解都表示赞赏。

UDP sendto()错误:参数无效

我们正在尝试应用基于UDP的协议,并且在sendto()函数中存在一些问题。 当我们尝试用ack响应写请求时,我们从sendto()函数得到“invalid argument” 这是我们的代码: int sock; // Socket sockaddr_in_t echoServAddr; // Local address sockaddr_in_t echoClntAddr; // Client address unsigned int cliAddrLen; // Length of incoming message data_packet_t echoBuffer; wrq_packet_t wrqBuffer; unsigned short echoServPort; // Server port int recvMsgSize; // Size of received message ack_packet_t Ack; struct timeval timeout; fd_set fds; /* Create socket for sending/receiving […]