下面是一个点对点简单的俩天程序,为什么我生成可以成功,运行起来也没问题,但是只要我用两台机器测试,测试结果对方接收不到,这个问题不算,我还没完善,关键的问题是,只要是两台电脑测试以后,关闭这个程序,再运行就会出错,自动关闭,调试的说是  this.TcpListener.Start();这句有问题,大家帮我解释解释,另外一个问题,监听建立之后,是怎么样把监听结果付给byte[] 的?代码是从网上搜集的,我是初学,谢谢
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Threading;
using System.IO;namespace lsChat
{
    public partial class Form1 : Form
    {
        private TcpListener TcpListener;
        private Thread sends;
        private Thread Listener;        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            this.Listener = new Thread(new ThreadStart(StartListen));
            this.Listener.Start();
        }        private void StartListen()
        {
            this.TcpListener = new TcpListener(19808);
            this.TcpListener.Start();
            while (true)
            {
                TcpClient TcpClient = this.TcpListener.AcceptTcpClient();
                NetworkStream MyStream = TcpClient.GetStream();
                byte[] bytes = new byte[2048];
                int bytesRead = MyStream.Read(bytes, 0, bytes.Length);
                string message = System.Text.Encoding.UTF8.GetString(bytes, 0, bytesRead);
                //string message = bytesRead.ToString();
                this.richTextBox1.Text += message + "\n";
            }
        }
        private void button1_Click(object sender, System.EventArgs e)
        {
            if (sends == null || !sends.IsAlive)
            {
                sends = new Thread(new ThreadStart(send));
                sends.Start();
            }
            else
                MessageBox.Show("发送过快!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }        private void button2_Click(object sender, System.EventArgs e)
        {
            MessageBox.Show("by 无天无涯.\n输入对方IP地址,只要双方都打开本程序即可聊天...");
        }        private void send()
        {
            if (this.ip.Text.Length < 7)
            {
                MessageBox.Show("IP地址错误!", "错误信息:");
                return;
            }
            //if (this.richTextBox1.Text.Length < 1)
            //{
            //    return;
            //}
            try
            {
                string Message = this.NickName.Text + ":" + this.richTextBox1.Text;
                TcpClient TcpClient = new TcpClient(this.ip.Text, 19808);
                NetworkStream tcpStream = TcpClient.GetStream();
                StreamWriter stream = new StreamWriter(tcpStream);
                stream.Flush();
                stream.Write(Message);
                stream.Close();
                TcpClient.Close();
                this.richTextBox2.AppendText(Message + "\n");
            }
            catch (Exception Err)
            {
                MessageBox.Show(Err.Message, "错误信息:", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            finally
            {
                sends.Abort();
            }
        }
    }
}

解决方案 »

  1.   


    运行程序的话就报,程序遇到问题需要关闭,抱歉,然后提示向微软发送错误报告这个时候如果用vs再次调试程序,就会报this.TcpListener.Start();的错误,提示是:
    通常每个套接字地址(协议/网络地址/端口)只允许使用一次。我不明白这么回事
      

  2.   

    from关闭时间里加个Listener.Stop()
      

  3.   

    擦。。看错了 应该是TcpListener.Stop() 
    再个你的TcpListener实例化位置应该独立开来吧
      

  4.   

    是你的程序有问题,你应该在适当的地方,去释放资源的,例如停止监听,例如你在推出应用程序时,应该使用
    Application.Exit();
      

  5.   

    帮你改了,可正常运行了private TcpListener TcpListener;
    private Thread sends;
    private Thread Listener;
    bool isDo = false;
    private void Form2_Load(object sender, EventArgs e)
    {
        this.Listener = new Thread(new ThreadStart(StartListen));
        this.Listener.Start();
    }
    private void button1_Click(object sender, EventArgs e)
    {
        if (sends == null || !sends.IsAlive)
        {
            sends = new Thread(new ThreadStart(send));
            sends.Start();
        }
        else
            MessageBox.Show("发送过快!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);}
    private void StartListen()
    {
        isDo = true;
        this.TcpListener = new TcpListener(19808);
        this.TcpListener.Start();
        while (isDo)
        {
            TcpClient TcpClient = this.TcpListener.AcceptTcpClient();
            NetworkStream MyStream = TcpClient.GetStream();
            byte[] bytes = new byte[2048];
            int bytesRead = MyStream.Read(bytes, 0, bytes.Length);
            string message = System.Text.Encoding.UTF8.GetString(bytes, 0, bytesRead);
            //string message = bytesRead.ToString();
            this.Invoke(new MethodInvoker(delegate
            {
                this.richTextBox1.Text += message + "\n";
            }));
        }
    }
    private void button2_Click(object sender, EventArgs e)
    {
        MessageBox.Show("by 无天无涯.\n输入对方IP地址,只要双方都打开本程序即可聊天...");
    }
    private void send()
    {
        this.Invoke(new MethodInvoker(delegate{
        if (this.ip.Text.Length < 7)
        {
            MessageBox.Show("IP地址错误!", "错误信息:");
            return;
        }
        try
        {
            string Message = this.NickName.Text + ":" + this.richTextBox1.Text;
            TcpClient TcpClient = new TcpClient(this.ip.Text, 19808);
            NetworkStream tcpStream = TcpClient.GetStream();
            StreamWriter stream = new StreamWriter(tcpStream);
            stream.Flush();
            stream.Write(Message);
            stream.Close();
            TcpClient.Close();
            this.richTextBox2.AppendText(Message + "\n");
        }
        catch (Exception Err)
        {
            MessageBox.Show(Err.Message, "错误信息:", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
        finally
        {
            sends.Abort();
        }
        }));
    }private void Form2_FormClosing(object sender, FormClosingEventArgs e)
    {
        isDo = false;
        this.Listener.Abort();
        this.TcpListener.Stop();
        this.sends.Abort();
    }