linux UDP client接收不到数据

Caballeroo 2009-10-09 10:19:59
我在linux下写了个UDP的server和client的代码,
现在出了这样一个问题,

server收到了client的数据,并回复了,但是client一直收不到server回复的内容,,后来我用抓包工具建立了一个server来连接之前的client,发现接收到的client的端口并非我开始设定的端口,

具体如下:

client建立一个socket并设置了端口为8019,ip为192.192.192.210,由该socket对server发送数据,然后又使用该socket来接受server回馈的数据,但是server回馈的端口并非为8019,所以client并没有收到server的数据。



请问怎么解决!





...全文
1083 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
Caballeroo 2009-10-10
  • 打赏
  • 举报
回复
顶 !
Caballeroo 2009-10-10
  • 打赏
  • 举报
回复
对应该是端口问题,代码在3楼!
mlnr_xuhuaihong 2009-10-10
  • 打赏
  • 举报
回复
代码贴出来呗
mlnr_xuhuaihong 2009-10-10
  • 打赏
  • 举报
回复
换个端口号试试呢?
guan323333 2009-10-10
  • 打赏
  • 举报
回复
顶个 应该是端口的问题吧
Caballeroo 2009-10-10
  • 打赏
  • 举报
回复
很着急啊,哪位大哥给予解答一下!
Caballeroo 2009-10-10
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 pcboyxhy 的回复:]
server端bind,客户端不需要
[/Quote]

但是针对我的问题,请问楼上能给予意见吗?
pcboyxhy 2009-10-10
  • 打赏
  • 举报
回复
server端bind,客户端不需要
Caballeroo 2009-10-10
  • 打赏
  • 举报
回复
我把client端的端口号,bind到一个socket上,然后使用socket对server进行收发,通过抓包工具看,server端显示的client的端口是我bind的 端口,,但是client还是收不到server的数据,但是server可以收到client的数据,,,请问解决!


Caballeroo 2009-10-10
  • 打赏
  • 举报
回复
楼上能不能贴下代码 bind的
云梦谭 2009-10-10
  • 打赏
  • 举报
回复
没有bind()的话,发送时的端口是一个短命端口。如果SERVER的实现是类似回射(即回复到接收端口),那么用短命端口肯定是不行的。当然,在哪个端口接收,不是传输层关心的事,这是应用层协议的约定。也就是说可以在SERVER和CLIENT间约定一个通信端口,CLIENT端就bind()这个端口,而SERVER的回复也从这个端口走。
wwyytt1 2009-10-10
  • 打赏
  • 举报
回复
server端绑定端口8019,然后client端向这个端口发送数据
server端发送数据也需要通过8019,客户端就能够收到
一个连接应该只用一个端口,客户端不需要绑定端口
Caballeroo 2009-10-09
  • 打赏
  • 举报
回复
ding
Caballeroo 2009-10-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 oyster2008 的回复:]
服务器反馈的端口号是多少
[/Quote]


服务端bind的端口为8019
Caballeroo 2009-10-09
  • 打赏
  • 举报
回复
通过抓包工具发现,每次client发送过来的数据端口不确定
oyster2008 2009-10-09
  • 打赏
  • 举报
回复
服务器反馈的端口号是多少
Caballeroo 2009-10-09
  • 打赏
  • 举报
回复
客户端需要bind?

server端才要bind吧。
oyster2008 2009-10-09
  • 打赏
  • 举报
回复
要用bind将端口号绑定到客户端上
Caballeroo 2009-10-09
  • 打赏
  • 举报
回复
client端代码如下:


fd=socket(AF_INET,SOCK_DGRAM,0);

inetaddr=inet_addr(IP);
recv_sockaddr.sin_family=AF_INET; recv_sockaddr.sin_addr.s_addr=inetaddr;
recv_sockaddr.sin_port= htons(port);


recvfrom_socket(recv_sock_fd,sock_buf,sizeof(sock_buf),(sockaddr_t *)(&recv_sockaddr),&sock_len);


sendto_socket(recv_sock_fd, sock_buf, len, (sockaddr_t *)(&recv_sockaddr),sizeof(sockaddr_t));
oyster2008 2009-10-09
  • 打赏
  • 举报
回复
注意网络字节序

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧