请教各位一个问题,我在写一个与服务器通信的程序时,需要不断地监听来自服务器的数据,同时客户端也要发送数据到服务器。监听服务器返回数据包的程序采用线程的方式实现,主要代码如下:
try
{ TcpClient TcpClient = new TcpClient();
TcpClient.Connect(IPAddress.Parse("202.102.1.112"), Int32.Parse("8888")); Stream stm = TcpClient.GetStream();
int k = stm.Read(bb, 0, 1);以下不贴出了,总之就是从stream中读取数据。
发送的主要代码如下:
try
{
ips = IPAddress.Parse(Ip.ToString());//IP ipe = new IPEndPoint(ips, Convert.ToInt32(port.ToString()));
c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp c.Connect(ipe);
byte[] bs = HexStringToByteArray(data);
if (null != bs)
{
c.Send(bs, bs.Length, 0);//发送指令
c.Close();
}
}现在监听使用的是线程,不停重复执行如第一段所示代码,而发送函数在按下按键后才执行。现在出现的问题是:监听线程如果没有启动,那么发送函数是正常发送的,一旦启动了,服务器收不到发送出来的数据,虽然我单步跟踪发现没有任何异常。请教一下出现这种情况是怎么回事呢?
try
{ TcpClient TcpClient = new TcpClient();
TcpClient.Connect(IPAddress.Parse("202.102.1.112"), Int32.Parse("8888")); Stream stm = TcpClient.GetStream();
int k = stm.Read(bb, 0, 1);以下不贴出了,总之就是从stream中读取数据。
发送的主要代码如下:
try
{
ips = IPAddress.Parse(Ip.ToString());//IP ipe = new IPEndPoint(ips, Convert.ToInt32(port.ToString()));
c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp c.Connect(ipe);
byte[] bs = HexStringToByteArray(data);
if (null != bs)
{
c.Send(bs, bs.Length, 0);//发送指令
c.Close();
}
}现在监听使用的是线程,不停重复执行如第一段所示代码,而发送函数在按下按键后才执行。现在出现的问题是:监听线程如果没有启动,那么发送函数是正常发送的,一旦启动了,服务器收不到发送出来的数据,虽然我单步跟踪发现没有任何异常。请教一下出现这种情况是怎么回事呢?
参考我的博客
2.如果真如你所说,那应该是你服务器的设定了最大可连接数,你得第一段不断的建立新Socket造成可连接数满了。
3.如果实在不行,设立断点自己查,应该可以的