Socket高手看下
发布网友
发布时间:2022-05-24 18:30
我来回答
共3个回答
热心网友
时间:2023-10-25 06:21
思路不是很对。
上面说得很好,receive是一个拥塞函数,不仅仅是没有接受到数据的时候拥塞,而是一直拥塞,直到对方关闭套接字才会关闭。
你用一个socket同时 做了 服务端和客户端的工作。
这表明,这client.receive函数一直接收来自send函数的数据。
所以才会出现第二次接收的时候,进入死循环(原因是receive一直在等待数据传送结束)
======我的想法
分开两个程序,虽然是在同一电脑,还是分开好,一个客户端,一个服务端。
服务端的receive 用一个死循环,不停收信息,
while(1==1)
{
receive;
Thread.Sleep(5000);
//你需要写行代码手工跳出这个循环
}
跳出这个循环后,只能再new一个socket进行下一次通讯
热心网友
时间:2023-10-25 06:21
Receive 是个阻塞函数,意思就是,如果服务器没有返回数据给client,程序代码将一直停在client.Receive(wwww1);这一行等待,下一行代码不会执行的,所以,你这里卡死,应该是由于你的服务器端没有返回数据给client.
通常,我们写Socket的收发的时候,是分开写的.并且是写在线程中,一个监听线程负责Receive,一个发送线程负责Send,这样就不会出现等待数据发送或者接受时,界面假死或者程序无响应了
热心网友
时间:2023-10-25 06:22
第一个关掉看看呢?
client.Shutdown(SocketShutdown.Both);
client.Close();
关掉后在连接尝试看看