关于udp的两个问题

ga6840 2009-09-04 12:36:49
Q1>udp, 一端发送端口为8012 发送到本机回路“127.0.0.1”的8021端口; 另一端:接收端口为8021,接受从“96.12.6.128”,端口为8012 发过来的数据。当两个端口程序都运行在同一台机器上时,接收端程序居然可以收到数据 ,这是为什么?

Q2>udp,sendto函数第二个参数“待发送的缓冲区” 传入一个长度为8000的缓冲区,第三个参数“待发送的字节数”指定为50,发送。而recvfrom函数却不能知道send过来的数据实际只用接受50 ,只能把recvfrom函数的第三个参数“准备接受的字节数”指定为8000;那么sendto函数到底发送了多少的数据,是50 ?还是8000?它的“待发送的字节数”相对于recvfrom函数又有什么用??

谢谢大家
辛苦了
...全文
73 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
勤奋的沉沦 2009-09-04
  • 打赏
  • 举报
回复
Q1 96.12.6.128 是不是本机?


Q2
ssize_t sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen);
ssize_t recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen)

sendto的len指定发送的长度
recvfrom返回值是收到数据的字节数 应该都是50
herman~~ 2009-09-04
  • 打赏
  • 举报
回复
Q1 是正确的,lz是不是以为发环回地址系统直接做的内存拷贝。但事实上可能只是数据包并没通过你局域网的路由器,只是本机处理但一样可以通过 socket层面接收

Q2 sendto 返回值 返回你发送了多少


wanjingwei 2009-09-04
  • 打赏
  • 举报
回复
第一个很正常,不然自己写的客户端服务器端程序怎么在本机上测试
第二个你发送了50但不一定全部接收,recvfrom返回接收到的字节数
lzy0001sl 2009-09-04
  • 打赏
  • 举报
回复
【SendIp,RecvIp,SendPort,RecvPort,Protocol】
这是一组完整的通信,改变其一,就会是另一组通信了。
uglylourt 2009-09-04
  • 打赏
  • 举报
回复
1:这个很正常,在同一台机器的两个程序使用相同的端口当然能收到。
2:50. recvfrom的意思是说你准备接多少,如果你发了50但接收了10,那么还有40,仍然在哪个端口上。
acrobatyuer 2009-09-04
  • 打赏
  • 举报
回复
LZ你可以把问题描述的再详细一点,好吗???
  • 打赏
  • 举报
回复
Q1>udp, 一端发送端口为8012 发送到本机回路“127.0.0.1”的8021端口; 另一端:接收端口为8021,接受从“96.12.6.128”,端口为8012 发过来的数据。当两个端口程序都运行在同一台机器上时,接收端程序居然可以收到数据 ,这是为什么?

完全没讲清楚?你的一端是什么ip,另一段是什么ip,都没说明白。
一端发送端口为8012 发送到本机回路“127.0.0.1”的8021端口
这个又是啥意思?

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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