我想实现一个服务端与多个客户端TCP通讯的例子,现在服务端可以给每个客户端发信息,但是客户端发来的信息服务端收不到。大家麻烦下看看怎么回事?
客户端代码:
 public Form1()
        {
            InitializeComponent();
            Control.CheckForIllegalCrossThreadCalls = false;
        }
        Thread th;
        private void button1_Click(object sender, EventArgs e)//开始监听
        {
           th = new Thread(JTstart);
           th.Start();
        }
        TcpListener myTL;
        List<TcpClient> TClist = new List<TcpClient>();//用于保存每个连接的TcpClient对象
        void JTstart()
        {
            myTL = new TcpListener(IPAddress.Parse(textBox1.Text.Trim()), Int32.Parse(textBox2.Text.Trim()));
            myTL.Start();
            while (true)
            {
                TcpClient myTC = myTL.AcceptTcpClient();
                TClist.Add(myTL.AcceptTcpClient());
                listView1.Items.Add((myTC.Client.RemoteEndPoint).ToString());             
                NetworkStream NS = myTC.GetStream();
                StreamReader SR = new StreamReader(NS);
                StreamWriter SW = new StreamWriter(NS);
                SW.WriteLine("已连接");              
                SW.Flush();//如果有客户端连接 就给客户端 发回一个信息  
                getmessage g = new getmessage();//实例化一个getmessage 对象
                g.myTC = myTC;//把当前TcpClient对象引用给getmessage成员
                g.SRR = SR;//把当前读流引用给getmessage成员
                g.temp = this.textBox3;//textBox3是用于显示客户端发来的信息的
                new Thread(g.getmes).Start();//开始一个线程接收该客户端发来流                                  
            }
        } 
        private void button2_Click(object sender, EventArgs e)
        {
            if(listView1.SelectedItems.Count>0)
            { 
              NetworkStream  NS = TClist[listView1.SelectedIndices[0]].GetStream();//选择一个客户端
              StreamWriter   SW = new StreamWriter(NS);
              SW.WriteLine(textBox4.Text.Trim());
              SW.Flush();//给客户端发送信息
             }
            else
            {
                MessageBox.Show("请选择发送对象!","提示信息",MessageBoxButtons.OK,MessageBoxIcon.Information);
            }
        }
        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            System.Environment.Exit(0);
        }    
    }
    class getmessage
    {
       public  TcpClient myTC;
       public StreamReader SRR;
       public TextBox temp;
       public void getmes()
       {
           while (true)
           {
               string ss= SRR.ReadLine();//这里我断点时候。 这里有错误我看不懂 ??????????????
               temp.Text += myTC.Client.RemoteEndPoint.ToString() + "说:" + ss+ "\r\n";
               //一旦有客户端的信息就显示在服务端的TextBox上
           }
       }
    }客户端:
public Form1()
        {
            InitializeComponent();
            Control.CheckForIllegalCrossThreadCalls = false;        }
        Thread th;
        private void button1_Click(object sender, EventArgs e)//开始连接
        {
            th = new Thread(LJstart);
            th.Start();        }
        TcpClient myTC;
        StreamWriter SW;
        StreamReader SR;
        NetworkStream NS;
        void LJstart()
        {
            myTC = new TcpClient(textBox1.Text.Trim(), Int32.Parse(textBox2.Text.Trim()));
            NS = myTC.GetStream();
            SR = new StreamReader(NS);
            SW = new StreamWriter(NS);
            while (true)
            {
                textBox3.Text += myTC.Client.RemoteEndPoint.ToString() + "说:" + SR.ReadLine() + "\r\n";//把服务端发来的信息信息在textBox3             
            }
        }
        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            System.Environment.Exit(0);
        }        private void button2_Click(object sender, EventArgs e)//发送按钮
        {        
            SW.WriteLine(textBox4.Text.Trim());//把编辑的内容发给服务端
            SW.Flush();
            textBox4.Text = "";
        }