udp客户端每次运行生成的socket都相同吗?

gdtt 2012-08-20 11:34:13
例如udp客户端正在运行,服务端保留了udp客户端的socket。但突然间upd端电脑停电或者意外断网,接着udp客户端又重新启动运行,且向服务器发送信息,请问,每次生成的socket都相同吗?
...全文
152 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
vcorange 2012-08-21
  • 打赏
  • 举报
回复
服务端保留了udp客户端的socket
对方不能保存socket吧,它可以记录的是 源地址,源端口 ,以及发送的数据吧

无所谓本机 使用 那个端口,只要能够连接到对方的服务端口,并且对方允许该连接,允许数据的传输就可以了
skyandcode 2012-08-21
  • 打赏
  • 举报
回复
会变,但变不变都没关系吧,反正端口指定了
Harper 2012-08-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
同一台电脑同一个UDP客户端每次的(SOCKADDR*) &ClientAddr都相同吗?
[/Quote]

SOCKADDR_IN 的那几个字段分别是:
端口-- 这个不会变的
主机地址-- ip 也不会变
address family-- 这个大多是AF_INET,不会变
分析得出 理论上不变
shentao17792 2012-08-21
  • 打赏
  • 举报
回复
lz首先要弄清楚,socket句柄只是本地的标识,标识一个socket连接。

按你说的情况,客户端重启,那么创建的socket句柄的值可能和上次相同,可能不同,但是同与不同并没有意义。
oyljerry 2012-08-21
  • 打赏
  • 举报
回复
z这种情况应该是客户端重新跟服务端进行连接,重新通信
youngwolf 2012-08-21
  • 打赏
  • 举报
回复
你所谓的相同是什么意思?
ip+port相同,还是SOCKET句柄相同?

两次创建socket,ip+port和SOCKET句柄,都有可能相同,也有可能不相同。不要做任何假设。
gdtt 2012-08-20
  • 打赏
  • 举报
回复
同一台电脑同一个UDP客户端每次的(SOCKADDR*) &ClientAddr都相同吗?
Gloveing 2012-08-20
  • 打赏
  • 举报
回复
if (len = recvfrom(ServerSocket, ReceiveBuffer, 1024, 0, (SOCKADDR*) &ClientAddr, &ClientAddrSize) < 0)
{
printf("recvfrom failed with error %d\n", WSAGetLastError());
return ;
}
else
{
printf("Received Data:%s From :%s\n", ReceiveBuffer, inet_ntoa(ClientAddr.sin_addr));
len = sendto(ServerSocket, ReceiveBuffer, strlen(ReceiveBuffer), 0, (SOCKADDR*) &ClientAddr, sizeof(ClientAddr));
if (len < 0)
{
printf("sendto failed with error %d\n", WSAGetLastError());
return ;
}
每次在红色部分就记录下了客户端的信息

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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