多客户端 连接服务端。
每个客户端10秒发送一次数据   每次大概1000条。发送的数据为字符串客户端代码:
if (client.Connected)
                    {
                        Socket socket = client.Client;                        byte[] SendByte = System.Text.Encoding.Default.GetBytes(strData);
                        socket.Send(SendByte);                                                try
                        {
                            byte[] GetByte = new byte[1024];
                            int ByteNum = socket.Receive(GetByte);                            if (GetByte.Length > 1)
                            {
                                string str = System.Text.Encoding.Default.GetString(GetByte).Replace("\0", "");
                                string strs = "已接收" + DataType + ID;
                                log.WriteLine(str + "&" + strs);                                if (str == strs)
                                    returnCount = 1;
                                else
                                    returnCount = 2;
                            }
                            else
                            {
                                returnCount = 2;
                                log.WriteLine("无法从远程服务器获取数据!");
                            }
                        }
                        catch (Exception ex)
                        {
                            log.WriteLine("连接远程服务器超时,失败原因:" + ex);
                            returnCount = 2;
                        }
                    }服务端代码:
/// <summary>
        /// 回调函数,异步读取TCP客户端的请求
        /// </summary>
        /// <param name="ar"></param>
        private void ReadCallBack(IAsyncResult ar)
        {
            TcpClient client = (TcpClient)ar.AsyncState;
            try
            {
                NetworkStream stream = null;                foreach (ClientActive active in list)
                {
                    if (active.IpAddress == client.Client.RemoteEndPoint.ToString())
                    {
                        stream = client.GetStream();
                    }
                }                if (stream == null)
                {
                    return;
                }                bool request = false;
                int numberOfBytes=0;
                if (client.Connected)                
                    numberOfBytes = stream.EndRead(ar);
                
                tcpClientConnected.Set();
                string DataType = "";
                string ID="";
                if (numberOfBytes > 0)
                {
                    try
                    {
                        string str = System.Text.Encoding.Default.GetString(buffer).Replace("\0", "");
                        //处理逻辑                        
                    }
                    catch (Exception ex)
                    {
                        mylog.WriteLine("服务解析" + client.Client.RemoteEndPoint.ToString() + "数据时出错,出错原因:" + ex);
                    }
                }                if (request)
                {
                    string str = "已接收" + DataType + ID;
                    byte[] returnByte = System.Text.Encoding.Default.GetBytes(str);
                    client.Client.Send(returnByte);
                }
                else
                {
                    byte[] returnByte = System.Text.Encoding.Default.GetBytes("未接收");
                    client.Client.Send(returnByte);
                }                client.GetStream().Flush();
                this.buffer = new byte[1024];
                client.GetStream().BeginRead(buffer, 0, buffer.Length, ReadCallBack, client);
            }
            catch (Exception ex)
            {
                mylog.WriteLine("回调函数执行出错,出错原因:" + ex);
            }
        }客户向服务端发送一条数据,服务端返回接收结果。客户端再发送下条数据
初学TCP,求解!!

解决方案 »

  1.   

    错误代码如下:
    [ 2011-8-30 17:00:35 ] 连接远程服务器超时,失败原因:System.Net.Sockets.SocketException (0x80004005): 远程主机强迫关闭了一个现有的连接。
       在 System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
       在 System.Net.Sockets.Socket.Receive(Byte[] buffer)
       在 kjtxNet.Client.ClientSend.SendData(String strData, TcpClient client, String DataType, String ID) 位置 
      

  2.   


    你的服务器端代码:
    client.GetStream().Flush();
                    this.buffer = new byte[1024];
                    client.GetStream().BeginRead(buffer, 0, buffer.Length, ReadCallBack, client);上面是你再一次开始读取的代码,但是有个问题你这些代码包在了try里面,如果他上面的代码引发异常,
    这些就不执行了。服务器就不会再接收数据了。。