使用TCP协议,服务端和客户端能够稳定通信,但是服务端和客户端中一个插件进行TCP进行通信就会有问题,通过测试插件中的send函数没有异常能发送,但是执行receive()函数程序就会卡在那里,执行if (TcpClient.Poll(-1, SelectMode.SelectRead))也会卡在当前位置,不知道什么原因。
Debug.WriteLine("Timer");
CheckServer(null);
Debug.WriteLine("CheckServer");
try
{
Debug.WriteLine("CheckServer 11111");
try
{
if(TcpClientEx.IsOnline(TcpClient))
{
Debug.WriteLine("Test");
if (TcpClient.Poll(-1, SelectMode.SelectRead))
{
//int numbers = TcpClient.Receive(Buffer, 4, 0);
//Debug.WriteLine(numbers);
Debug.WriteLine("CheckServer 22222"); //打印不出来
}
}
else
{
Debug.WriteLine("BBBBBBBBBBBB"); //打印不出来
}
//ReadServertDataEx(0);
Debug.WriteLine(" ReadServertDataEx(0);"); //打印不出来
}
catch(ObjectDisposedException aa)
{
Debug.WriteLine(aa);
}
}
catch(Exception ex)
{
Debug.WriteLine("Erro Receive");
Debug.WriteLine(ex);
}
Debug.WriteLine("CCCCCCCCCCCC"); //打印不出来
Plugin Invoked
InitializeClient()
127.0.0.1
7654
Plugin Connected!
Timer
Send Ping!
4
Send2
39
CheckServer
CheckServer 11111
Test
线程 0x4570 已退出,返回值为 0 (0x0)。
线程 0x443c 已退出,返回值为 0 (0x0)。
线程 0x35c8 已退出,返回值为 0 (0x0)。
Send Ping!
4
Send2
39
线程 0x1fc8 已退出,返回值为 0 (0x0)。
线程 0x59d4 已退出,返回值为 0 (0x0)。
线程 0x51c0 已退出,返回值为 0 (0x0)。
Send Ping!
4
Send2
39
现在不知道问题到底在哪?
如何让客户端中的插件也能正常接收数据
if (TcpClient.Poll(-1, SelectMode.SelectRead))很明显这一句没有返回值,也就是说TcpClient.Poll(-1, SelectMode.SelectRead)表达式没有执行完毕
根据函数说明将poll的第一个参数改为负数,那么程序运行到此处一定会阻塞,直到有可读的内容,或者连接断开。
说明没有新数据,在阻塞状态,因为函数阻塞,所以没有返回值,因此过一定的时间会断开链接,导致异常退出,
如果要测试一定要在断开链接前,服务器发送测试数据,看看能否接收到
网络不行,掉线了