【发布时间】:2018-06-08 21:53:40
【问题描述】:
我正在做一个学术课程,但我遇到了问题。我的程序是一个带有 C 语言套接字的 ftp-utp 模拟器。他在相同的处置中工作得很好,但我需要在不同的处置中使用。当我在不同的电脑上使用时,“ip”不会发送到 recvfrom(或没有收到),但在同一台电脑上,ip 会被识别。对不起我的英语不好,我是新来的插座。有人能帮我吗?
发件人:
char *ip = (char*) malloc(strlen(message)*sizeof(char));
strcpy(ip,message);
SOCKET winsock;
SOCKADDR_IN sock;
winsock=socket(AF_INET,SOCK_DGRAM, 0);
sock.sin_family=AF_INET;
sock.sin_addr.s_addr=inet_addr(IP_CLIENTE);
sock.sin_port=htons(9010);
sendto(winsock,ip,strlen(ip),0,(SOCKADDR*)&sock,sizeof(sock));
接收者:
SOCKET winsock;
SOCKADDR_IN sock;
int size=sizeof(sock);
char message[BUFLEN];
winsock=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
sock.sin_family=AF_INET;
sock.sin_port=htons(9010);
sock.sin_addr.s_addr = inet_addr(IP_RAST);
bind(winsock,(SOCKADDR*)&sock,sizeof(sock));
memset(message,0,sizeof(BUFLEN));
recvfrom(winsock,message,BUFLEN,0,(SOCKADDR*)&sock,&size);
closesocket(winsock);
WSACleanup();
return message;
【问题讨论】:
-
请提供正确的minimal reproducible example,包括
IP_CLIENTE和IP_RAST的定义 -
另外,您为
ip分配的内存太少 - 它不能容纳message的空终止符;分配strlen(message) + 1字节。 -
您的翻译器有问题。 “决定性”一词并不意味着您认为它会做什么——您可能想要的词是“设备”。