解决方案 »

  1.   

    在服务端,建立循环,触发式等待socket。
    如果客户端连接,并发送数据到服务端,则单独开启线程,
    处理客户端请求,并利用客户端的连接传送数据到客户端。
    一段简单的代码:
     sockets = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                IPAddress hostIP = IPAddress.Parse(Dns.GetHostEntry(Dns.GetHostName()).AddressList[0].ToString());
                IPEndPoint ep = new IPEndPoint(0, 7788);            sockets.Bind(ep); 
                sockets.Listen(10);
                textBox1.BeginInvoke(new MethodInvoker(delegate
                {
                    textBox1.Text += "侦听启动\r\n";
                }));            while (thread.ThreadState != ThreadState.Aborted)
                {
                    Socket sReceive = sockets.Accept();
                    textBox1.BeginInvoke(new MethodInvoker(delegate
                    {
                        textBox1.Text += ((IPEndPoint)sReceive.RemoteEndPoint).Address.ToString() + " 连接\r\n";
                    }));
                    int bufLen = sReceive.ReceiveBufferSize;
                    if (bufLen == 0) continue;
                    byte[] bData = new byte[bufLen];
                    int DataLen = sReceive.Receive(bData);
                    if (DataLen == 0) continue;
                    string StrData = Encoding.Default.GetString(bData, 0, DataLen);
                    textBox1.BeginInvoke(new MethodInvoker(delegate
                    {
                        textBox1.Text += ((IPEndPoint)sReceive.RemoteEndPoint).Address.ToString() + ":" +StrData + "\r\n";
                    }));
                }
                sockets.Close();
                sockets = null;Socket sReceive = sockets.Accept();这个表示有客户端连接,到这一步,应该建立一个新线程类,把sReceive传到线程中,做数据接收,以及给客户端数据的回传。
    上述代码的完整工程地址:
    http://download.csdn.net/detail/mjp1234airen4385/2897578
      

  2.   

    Begin-End方法对,在发送方的EndReceive方法的AsyncCallback回调中解析回复,不用纠结线程