【发布时间】:2023-03-28 04:30:01
【问题描述】:
我的程序将在 Accept() 处停止等待阻塞,它会启动一个新线程来处理接受的套接字。
但是,有时客户端成功连接到服务器并发送数据, 我使用数据包嗅探器工具检查服务器是否已收到数据, 但是我的服务器程序会停止,直到我按下 Enter 键;
在我按下回车键后,之前发送的所有数据都会被处理。
但我的程序中没有任何Console.Read()。
这是我的代码:
static Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
public static int Main(String[] args)
{
listener.ReceiveTimeout = 10000;
listener.SendTimeout = 10000;
listener.Bind(localEndPoint);
listener.ReceiveBufferSize = 51200;
listener.SendBufferSize = 1283;
listener.Listen(30);
while(true) {
Socket clientSocket = listener.Accept();
Console.WriteLine("Connection Success");
var thread = new Thread(() => StartListening(clientSocket)) {
IsBackground = true
};
thread.Start();
}
return 0;
}
【问题讨论】:
-
此代码不显示您描述的行为。同时显示
StartListening()方法。 -
我不想问聪明,但你为什么还要使用
Accept?BeginAccept会更好。 -
@CodeCaster 你好,我的程序在卡住的时候甚至没有显示“连接成功”字样,我认为这不是问题点,所以我没有在 StartListening() 中发布代码,我如果您认为确实有必要,可以发布它
-
@Joshua Bakker 谢谢你的建议,我会试试的。
-
请贴出您用来处理客户端连接的所有代码,这些代码还不够。