C# socket编程中的socket超时
我有一个硬件连接到一台笔记本电脑(服务器)在特设网络 当服务器单独发送数据时,它工作正常。而且客户端单独发送数据,也可以正常工作 但当服务器和客户端一起发送数据时,经过一段时间后,就会发生超时 35之后,有时会出现33个数据包超时 我改变了硬件的传输速率,但它也断开了连接 尽管硬件支持全双工 超时后,我正在ping硬件,它不在端口上 并检查服务器上的端口,该端口已打开 我该怎么办C# socket编程中的socket超时,c#,C#,我有一个硬件连接到一台笔记本电脑(服务器)在特设网络 当服务器单独发送数据时,它工作正常。而且客户端单独发送数据,也可以正常工作 但当服务器和客户端一起发送数据时,经过一段时间后,就会发生超时 35之后,有时会出现33个数据包超时 我改变了硬件的传输速率,但它也断开了连接 尽管硬件支持全双工 超时后,我正在ping硬件,它不在端口上 并检查服务器上的端口,该端口已打开 我该怎么办 byte[] bytes = new byte[512]; //try //{
byte[] bytes = new byte[512];
//try
//{
IPHostEntry ipHost = Dns.GetHostEntry("");
// Gets first IP address associated with a localhost
IPAddress add = ipHost.AddressList[3];
TcpListener tcpListener = new TcpListener(add, 6000);
tcpListener.Start();
TcpClient tcpClient = tcpListener.AcceptTcpClient();
NetworkStream stream = tcpClient.GetStream();
String data = null;
while (true)
{
int j = 0;
int i;
while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
{
j = j + 1;
// Translate data bytes to a ASCII string.
data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
AddItem("j="+j+" Received:"+ data);
// Process the data sent by the client.
//data = data.ToUpper();
byte[] msg = System.Text.Encoding.ASCII.GetBytes("thanks");
// Send back a response.
stream.Write(msg, 0, msg.Length);
AddItem("Sent:"+"thanks");
}
// Shutdown and end connection
tcpClient.Close();
标准套接字调用都是阻塞的,因此如果两个参与者都在互相发送消息,那么他们都会等待对方接收他们发送的消息,从而导致错误 在.NET中,有三种典型的解决方案:
- 微软有一个并行的API。它需要比您的示例更多的开销代码,但以类似Windows的方式处理几乎所有事情
- 在使用编写之前,您可以通过测试可读数据自行处理异步活动。这是一种典型的投票方法,但你自己做每件事,需要确保没有饥饿或其他偏见
- 将
和读取
代码放在不同的线程中,这样阻塞一个线程就不会阻塞整个程序写入