我必须通过udp套接字发送多个变量类型:int数组和char。我想用相同的udp数据包发送它。标准溶液是什么?将所有内容转换为字节或类似的内容?
我使用的是:sendto(int-sockfd,const-void*buf,size\t len,int-flags,const-struct-sockaddr*dest\u-addr,socklen\t-addrlen);
我的代码是这样的:
int buffer[100];
char flag = '0';
int i = 0;
for (i = 0; i < 50; i++) {
buffer[i] = i * 2;
}
if (sendto(s, buffer, sizeof(buffer), 0, (struct sockaddr *) &si_client, slen) == -1 ){
//error
}
//rest of the program
通常的方法是将数据放入结构中。然后可以使用“sendto”调用一次发送整个结构。
请注意,虽然这不是完全便携式的。不同的系统可能会布局不同的结构。为了降低这种情况发生的风险,你应该。
是的,您需要将消息序列化为字节数组。没有接受int
数组的sendto
版本。试着这样做:
int arr[] = {1, 2, 3};
char str[] = "hello";
size_t buflen = sizeof arr + sizeof str;
char* buf = malloc(buflen);
if (NULL == buf)
abort();
unsigned i = 0;
for (unsigned j=0; j<3; ++j)
{
buf[i++] = (arr[j] >> 24) & 0x000000ff;
buf[i++] = (arr[j] >> 16) & 0x000000ff;
buf[i++] = (arr[j] >> 8) & 0x000000ff;
buf[i++] = (arr[j] >> 0) & 0x000000ff;
}
strcpy(&(buf[i]), str);
if (sendto(s, buffer, sizeof(buffer), 0, (struct sockaddr *) &si_client, slen) == -1 ){
//error
}
请注意,您的消息仍然可以作为多个数据包发送,例如,如果它的大小超过路径MTU。
我想在服务器端和客户端使用多播套接字。服务器将发送数据,客户端将接收数据。同时,如果数据丢失,客户端将向服务器发送nack数据包,服务器将收到nack数据包。我应该如何实现这一点,一个多播组和一个套接字端口,两个多播组和两个套接字端口?我希望服务器可以同时发送数据和接收nack,这可能吗? 非常感谢。
问题内容: (英语不是我的母语,不用担心某些句子是否很奇怪;)。 我正在开发 PONG游戏, 并且通过创建一些类来帮助我管理窗口,事件…和 网络, 因为我在游戏中添加了 LAN功能 ,但是当前您必须输入您想与之联系的人的地址。一起玩。解决此问题的方法是 广播(扫描播放器的LAN) 。对于ipv4来说这很容易,只需使用地址255.255.255.255,但是我们在2017年就提供了仅适用于ipv4的
这是我的客户端和服务器的代码。 class Client1{Client1(int no){try{String message;message=“Hello this is client”+no;byte[]b=message.getBytes();DatagramPacket dp=new DatagramPacket(b,b length,inetAddress.getLocalHost()
我写了一个简单的udp服务器客户端应用程序与多播套接字。服务器每6毫秒向三个客户端发送数据包。数据包大小为1200字节。这是每秒166,66个数据包。每当其中一个客户端检测到丢失的数据包时,它将通过单播向服务器发送NACK数据包。 第一个测试:服务器和三个客户端通过以太网连接到路由器TP链路TL-WDR4300(dd wrt),一切正常。 第二次测试:只有服务器通过以太网连接到路由器,其他客户端通
我已经在Minikube上部署了一个UDP套接字服务器。套接字服务绑定到端口2152。下面是description pod命令中的IP片段。 我的客户机与minikube运行在同一个VM上,无法与服务器通信。我在客户端使用服务器地址IP 172.17.0.3,端口为2152。我还尝试使用minikube IP 192.168.49.2将UDP数据从客户端发送到服务器。 请帮忙,这里有什么问题。
根据手册页: send()和write(2)之间的唯一区别是标志的存在。使用零标志参数,send()等同于write(2)。另外,下面的调用send(sockfd,buf,len,flags);相当于sendto(sockfd,buf,len,flags,NULL,0); 所以: 这是否意味着在UDP套接字上使用完全可以(如果我不需要)? 是否有方法在UDP套接字上使用(就像现在我在的参数中设置目