用TCP出现的问题,求助
服务端
private void Form1_Load(object sender, EventArgs e)
        {
            Thread t = new Thread(new ThreadStart(ListenerThread));
            t.IsBackground = true;
            t.Start();
        }        private void ListenerThread()
        {
            try
            {
                tcpListener = new TcpListener(new IPEndPoint(IPAddress.Parse("192.168.2.92"), 12000));
                tcpListener.Start();
                this.Invoke((EventHandler)delegate
                {
                    listBox1.Items.Add("正在监听12000端口");
                });
                while (true)
                {
                    TcpClient tcpClient = tcpListener.AcceptTcpClient();
                    IPEndPoint ep = (IPEndPoint)tcpClient.Client.RemoteEndPoint;
                    this.Invoke((EventHandler)delegate
                    {
                        listBox1.Items.Add("有客户端连接成功!");                        string ip = ep.Address.ToString();
                        int port = ep.Port;
                        listBox1.Items.Add("IP:" + ip + ",端口" + port.ToString());
                    });
                    NetworkStream netStream = tcpClient.GetStream();
                    StreamWriter writer = new StreamWriter(netStream);
                    StreamReader reader = new StreamReader(netStream);
                    string temp = reader.ReadLine();
                    this.Invoke((EventHandler)delegate
                    {
                        listBox1.Items.Add(temp);
                    });
                    writer.WriteLine(temp.ToUpper());
                    writer.Flush();
                    reader.Close();
                    writer.Close();
                    netStream.Close();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
客户端
public partial class Form1 : Form
    {
        TcpClient tcpClient;
        public Form1()
        {
            InitializeComponent();
        }        private void SendData()
        {
            //TcpClient tcpClient = new TcpClient();
            //tcpClient.Connect(new IPEndPoint(IPAddress.Parse("192.168.2.92"), 12000));
            NetworkStream ns = tcpClient.GetStream();
            StreamWriter writer = new StreamWriter(ns);
            StreamReader reader = new StreamReader(ns);
            writer.WriteLine(textBox1.Text.Trim());
            writer.Flush();
            string temp = reader.ReadLine();
            this.listBox1.Items.Add(temp);
            writer.Close();
            reader.Close();
        }        private void btnSend_Click(object sender, EventArgs e)
        {
            SendData();
        }        private void Form1_Load(object sender, EventArgs e)
        {
            tcpClient = new TcpClient();
            tcpClient.Connect(new IPEndPoint(IPAddress.Parse("192.168.2.92"), 12000));
        }
    }
出现的问题是客户端只能向服务器端发一次数据,第二次发数据,就会报 不允许对非连接的套接字执行此操作
如果把Form1_Load中代码去掉,SendData()中注释的代码 去掉注释,就能正常的多次发送了,但是这样,每次都要连接一次, 好像很明显,这样的代码,没有意义啊。求大侠们帮忙。C#TCP/IPListBox对象

解决方案 »

  1.   

    我在客户端 sendData 函数 加了一段
    if (tcpClient.Connected)
                {
                    this.listBox1.Items.Add("连接正常");
                }
                else
                {
                    this.listBox1.Items.Add("连接已关闭");
                }
    提示信息是连接已关闭 
      

  2.   

    用tcpClient.Client即Socket进行Send和Receive吧,不会有问题
      

  3.   

    具体实现可以参考我的博客介绍:http://blog.csdn.net/lizhi3186575/article/details/9017459
      

  4.   

    只有你说的最有用,服务器端,流不关闭,客户端的 流 (在这里是streamwrite或者streamread)也不关闭,就能成功了。我已经试过了。多谢