【问题标题】:Sockets C - Windows套接字 C - Windows
【发布时间】: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_CLIENTEIP_RAST的定义
  • 另外,您为ip 分配的内存太少 - 它不能容纳message 的空终止符;分配strlen(message) + 1 字节。
  • 您的翻译器有问题。 “决定性”一词并不意味着您认为它会做什么——您可能想要的词是“设备”。

标签: c sockets ftp


【解决方案1】:

我发现了错误!我刚刚在 Receiver 中将“inet_addr (IP_RAST)”替换为“INADDR_ANY”,现在工作正常!谢谢!是的,不是决定性的,是设备! ;)

【讨论】:

    猜你喜欢
    • 2014-05-18
    • 1970-01-01
    • 2011-10-09
    • 2018-12-02
    • 2013-04-12
    • 2020-10-20
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    相关资源
    最近更新 更多