首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TCP套接字发送/接收总是等待

TCP套接字发送/接收总是等待
EN

Stack Overflow用户
提问于 2016-08-24 08:07:29
回答 1查看 2.2K关注 0票数 1

我在服务器和客户机之间有一个TCP连接。服务器发送数据,客户端接收数据,客户端反馈服务器。但是,如果客户端关闭套接字并再次创建,服务器永远不会接受它,因为它正在等待客户端的反馈。那我该怎么解决呢?

服务器

代码语言:javascript
复制
byte[] buffer = new byte[1000];
string ip = "192.168.1.17";
int port = 15500;

IPAddress ipAddress = IPAddress.Parse(ip);
IPEndPoint localEndpoint = new IPEndPoint(ipAddress, port);

Socket sock = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

Console.WriteLine("Waiting client...");
sock.Bind(localEndpoint);
sock.Listen(5);

Socket confd = sock.Accept();

Console.WriteLine("Connected with {0} at port {1}", ip, port);
Sender sender = new Sender();
Receiver receiver = new Receiver();

while (true) {
    if (confd.Connected) {
        sender.SendData(confd);
        receiver.ReceiveData(confd); //Waiting here
    } 
    else {
        confd.Close();
        Console.WriteLine("Waiting client...");
        confd = sock.Accept();
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-24 08:17:34

每个套接字都有一个线程通常是个坏主意。拥有一个处理套接字IO和接受连接的单一线程通常是个糟糕的主意。套接字断开可能会被忽略的原因有很多--不管是暂时的,还是在某些情况下:无限期的。避免此问题的方法通常是有一个线程(或这些天:async循环)专门用于接受连接和初始化连接,然后使用异步IO不需要线程,而不是在每个套接字上创建一个线程。尽管您的套接字数量非常少,但是您可能可以使用每个套接字的线程。最后,要么使用读/写超时,要么定期使用“我最近见过这个套接字吗?”检查(对所有套接字),以帮助关闭已悄悄失败的套接字。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39117765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档