-1

我正在尝试在 Linux 中创建一个客户端以允许发送 UDP 数据包。到目前为止,程序似乎正确地形成了所有部分,但是当我尝试发送数据时,程序无法发送数据包。

我把代码放在这里,代码的示例输出如下:

jeremiah@ubuntu:~/Documents/Networking 2/Lab3/client$ sudo ./a.out 192.168.1.128 22222
巨大的成功
苏联帝国同志:SVN -> sin_family:2
苏联帝国同志:SVN -> sin_port:52822
苏联帝国同志:SVN -> sin_addr:-2147374912
注意同志:输入消息:红色


帝国苏联同志:数据包转储中的数据 ::::::::::::::::::::::::::::::::::::::::: start
苏联帝国同志:UPC的大小是1576
帝国苏联同志:插座:3
苏联帝国同志:UPC -> 旗帜:1
帝国苏联同志:UPC -> 偏移量:0
帝国苏联同志:UPC -> 长度:8
苏联帝国同志:UPC -> 文件名:红色
帝国苏联同志:UPC -> 数据:000000000000000000000000000000000000000000000000000000000000000000000000000000000
帝国苏联同志:UPC -> 数据:000000000000000000000000000000000000000000000000000000000000000000000000000000000
帝国苏联同志:UPC -> 数据:000000000000000000000000000000000000000000000000000000000000000000000000000000000
帝国苏联同志:UPC -> 数据:000000000000000000000000000000000000000000000000000000000000000000000000000000000
帝国苏联同志:UPC -> 数据:000000000000000000000000000000000000000000000000000000000000000000000000000000000
帝国苏联同志:UPC -> 数据:000000000000000000000000000000000000000000000000000000000000000000000000000000000
帝国苏联同志:UPC -> 数据:000000000000000000000000000000000000000000000000000000000000000000000000000000000
帝国苏联同志:UPC -> 数据:000000000000000000000000000000000000000000000000000000000000000000000000000000000
帝国苏联同志:UPC -> 数据:000000000000000000000000000000000000000000000000000000000000000000000000000000000
帝国苏联同志:UPC -> 数据:000000000000000000000000000000000000000000000000000000000000000000000000000000000
帝国苏联同志:UPC -> 数据:000000000000000000000000000000000000000000000000000000000000000000000000000000000
帝国苏联同志:UPC -> 数据:000000000000000000000000000000000000000000000000000000000000000000000000000000000
帝国苏联同志:UPC -> 数据:000000000000000000000000000000000000000000000000000000000000000000000000000000000
帝国苏联同志:UPC -> 数据:000000000000000000000000000000000000000000000000000000000000000000000000000000000
帝国苏联同志:UPC -> 数据:000000000000000000000000000000000000000000000000000000000000000000000000000000000
帝国苏联同志:UPC -> 数据:000000000000000000000000000000000000000000000000000000000000000000000000000000000
帝国苏联同志:UPC -> 数据:000000000000000000000000000000000000000000000000000000000000000000000000000000000
帝国苏联同志:UPC -> 数据:00000000000000000000000000000000000000000
苏联帝国同志:sizeof(UPC):8
苏联帝国同志:sockaddr.sin_family:2
苏联帝国同志:sockaddr.sin_port:52822
苏联帝国同志:sockaddr.sin_addr.s_addr:-2147374912
苏联帝国同志:sizeof(sockaddr):8
苏联帝国同志:数据包转储中的数据 :::::::::::::::::::::::::::::::::::::::::: : 结尾


帝国苏联同志:size_sent:-1
警告同志:数据未发送:参数无效

它完全编译没有错误,但在 printf 函数中有来自强制转换的警告。任何可以提供的帮助将不胜感激。

4

1 回答 1

1

这真的很可疑:

int size_sent = sendto(SOCKET, UPC, sizeof(UPC)+2*MAX_MESSAGE, 0, 
                       (struct sockaddr*) &TARGET, sizeof(TARGET)+2*MAX_MESSAGE);

为什么要将 2 * MAX_MESSAGE 添加到消息长度和 sockaddr 结构的大小?最后一个很可能是您的sendto()电话返回-1的原因。

还要记住 sizeof(UPC) 将是 4 或 8,而不是你想要的。

于 2012-04-24T14:08:31.197 回答