请教各位一个问题,我在写一个与服务器通信的程序时,需要不断地监听来自服务器的数据,同时客户端也要发送数据到服务器。监听服务器返回数据包的程序采用线程的方式实现,主要代码如下:
 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();
                }
            }现在监听使用的是线程,不停重复执行如第一段所示代码,而发送函数在按下按键后才执行。现在出现的问题是:监听线程如果没有启动,那么发送函数是正常发送的,一旦启动了,服务器收不到发送出来的数据,虽然我单步跟踪发现没有任何异常。请教一下出现这种情况是怎么回事呢?

解决方案 »

  1.   

    http://blog.csdn.net/fengyarongaa/article/details/6631953
    参考我的博客
      

  2.   

    1.如果你要监听服务器回发的信息,应该使用while循环来重复接收,你第一段的意思是不断连接服务器,这样造成多个IP相同但PORT不同的Socket连接Server,容易卡死,且会大量占用服务器的可监听号。
    2.如果真如你所说,那应该是你服务器的设定了最大可连接数,你得第一段不断的建立新Socket造成可连接数满了。
    3.如果实在不行,设立断点自己查,应该可以的