客户端第一次可以和服务器端正常连接和发送消息,把客户端断开连接,再重新连接后,服务器端就不能收到消息,这是什么问题?请指教!

解决方案 »

  1.   

    如果是用winForm开发的,有可能socket抛出异常了或者服务器端窗体失去焦点了。
      

  2.   

    是这样的:
    server:
    private TcpListener listener;
            private TcpClient client;
            private Thread thread1;
            private void buttonStart_Click(object sender, EventArgs e)
            {
                this.buttonStart.Enabled = false;
                IPAddress ip = IPAddress.Parse(this.textBoxIP.Text);
                Int32 port = Int32.Parse(this.textBoxPort.Text);
                listener=new TcpListener(ip,port);
                listener.Start(10);
                client = listener.AcceptTcpClient();
                    if (client.Connected)
                    {
                        this.listBoxState.Items.Add("与客户" + client.Client.RemoteEndPoint.ToString() + "建立链接");
                        thread1 = new Thread(new ThreadStart(AcceptMessage));
                        thread1.Start();
                    }
            }
            private void AcceptMessage()
            {
                while (true)
                {
                    try
                    {
                        NetworkStream netStream = client.GetStream();
                        byte[] buffer = new byte[1024];
                        int bytesRead = netStream.Read(buffer, 0, 1024);
                        string message = Encoding.Unicode.GetString(buffer, 0, bytesRead);
                        this.richTextBoxAccept.Rtf = message;
                    }
                    catch
                    {
                        this.listBoxState.Items.Add("与客户断开连接");
                        break;
                    }
                }
            }
            private void buttonSend_Click(object sender, EventArgs e)
            {
                string message = this.richTextBoxSend.Rtf;
                byte[] buffer =Encoding.Unicode.GetBytes(message);
                try
                {
                    NetworkStream netStream = client.GetStream();
                    netStream.Write(buffer, 0, buffer.Length);
                    this.richTextBoxSend.Text = "";
                }
                catch
                {
                    MessageBox.Show("无法发送!");
                }
            }        private void buttonStop_Click(object sender, EventArgs e)
            {
                this.buttonStart.Enabled = true;
                try
                {
                    listener.Stop();
                    listener = null;
                    if (client.Connected)
                    {
                        client.Close();
                        thread1.Abort();
                    }
                    this.listBoxState.Items.Add("停止监听");
                }
                catch
                {
                    MessageBox.Show("监听尚未开始,关闭无效");
                }
            }
    client:
     private TcpClient client;
            private Thread thread1;
            private void buttonRequest_Click(object sender, EventArgs e)
            {
                IPAddress ip = IPAddress.Parse(this.textBoxIP.Text);
                client = new TcpClient();
                Int32 port = Int32.Parse(this.textBoxPort.Text);
                try
                {
                    client.Connect(ip, port);
                }
                catch
                {
                    MessageBox.Show("与服务器连接失败");
                }
                this.buttonRequest.Enabled = false;
                this.listBoxState.Items.Add("与服务器连接成功");
                thread1 = new Thread(new ThreadStart(AcceptMessage));
                thread1.Start();        }
            private void AcceptMessage()
            {
                while (true)
                {
                    try
                    {
                        NetworkStream netStream = client.GetStream();
                        byte[] buffer = new byte[1024];
                        int bytesRead = netStream.Read(buffer, 0, 1024);
                        string message = Encoding.Unicode.GetString(buffer, 0, bytesRead);
                        this.richTextBoxReceive.Rtf =message;
                    }
                    catch
                    {
                        this.listBoxState.Items.Add("与服务器断开连接");
                        break;
                    }
                }
            }        private void buttonClose_Click(object sender, EventArgs e)
            {
                try
                {
                    client.Close();
                    this.listBoxState.Items.Add("与主机断开连接");
                    thread1.Abort();            }
                catch
                {
                    MessageBox.Show("尚未与主机连接,断开无效!");
                }
                this.buttonRequest.Enabled = true;        }
            private void buttonSend_Click(object sender, EventArgs e)
            {
                string message = this.richTextBoxSend.Rtf;
                byte[] buffer = Encoding.Unicode.GetBytes(message);
                try
                {
                    NetworkStream netStream = client.GetStream();
                    netStream.Write(buffer, 0, buffer.Length);
                    this.richTextBoxSend.Rtf = "";
                }
                catch
                {
                    MessageBox.Show("无法发送!");
                }
            }