private void Listen ( )          {               try               {                    tlTcpListen = new TcpListener ( port ) ; //以8000端口号来初始化TcpListener实例                   tlTcpListen.Start ( ) ; //开始监听                   statusBar1.Text = "正在监听..." ;                    tcClient = tlTcpListen.AcceptTcpClient ( ) ; //通过TCP连接请求                   nsStream = tcClient.GetStream ( ) ; //获取用以发送、接收数据的网络基础数据流                   srRead=new StreamReader(nsStream);//以得到的网络基础数据流来初始化StreamReader实例                   statusBar1.Text = "已经连接!";                     while( blistener ) //循环侦听                   {                        string sMessage = srRead.ReadLine();//从网络基础数据流中读取一行数据                        if ( sMessage == "STOP" ) //判断是否为断开TCP连接控制码                       {                             tlTcpListen.Stop(); //关闭侦听                            nsStream.Close(); //释放资源                            srRead.Close();                             statusBar1.Text = "连接已经关闭!" ;                             thThreadRead.Abort(); //中止线程                            return;                        }                         string sTime = DateTime.Now.ToShortTimeString ( ) ; //获取接收数据时的时间                       listBox1.Items.Add ( sTime + " " + sMessage ) ;                    }               }               catch ( System.Security.SecurityException )               {                    MessageBox.Show ( "侦听失败!" , "错误" ) ;               }          }         //开始监听         private void button1_Click(object sender, System.EventArgs e)         {              thThreadRead = new Thread ( new ThreadStart ( Listen ) );              thThreadRead.Start();//启动线程                         button1.Enabled=false;          }
         //连接          private void button1_Click(object sender, System.EventArgs e)         {              IPAddress ipRemote ;               try               {                    ipRemote = IPAddress.Parse ( textBox1.Text ) ;               }               catch //判断给定的IP地址的合法性              {                    MessageBox.Show ( "输入的IP地址不合法!" , "错误提示!" ) ;                    return ;               }                IPHostEntry ipHost ;               try               {                    ipHost = Dns.Resolve ( textBox1.Text ) ;                }               catch //判断IP地址对应主机是否在线              {                    MessageBox.Show ("远程主机不在线!" , "错误提示!" ) ;                    return ;               }                string sHostName = ipHost.HostName ;               try               {                    TcpClient tcpClient = new TcpClient(sHostName,8000);//对远程主机的8000端口提出TCP连接申请                   nsStream = tcpClient.GetStream();//通过申请,并获取传送数据的网络基础数据流                     swWriter = new StreamWriter(nsStream);//使用获取的网络基础数据流来初始化StreamWriter实例                   button1.Enabled = false ;                    button2.Enabled = true ;                    tcpConnect = true ;                    statusBar1.Text = "已经连接!" ;               }               catch               {                    MessageBox.Show ( "无法和远程主机8000端口建立连接!" , "错误提示!" ) ;                    return ;               }          }           //发送         private void button2_Click(object sender, System.EventArgs e)         {              if (textBox2.Text !="")               {                    swWriter.WriteLine(textBox2.Text);//刷新当前数据流中的数据                   swWriter.Flush();               }               else               {                   MessageBox.Show("发送信息不能为空!","错误提示!");               }         }

解决方案 »

  1.   

    while( blistener ) //循环侦听这个blistener是哪个?
      

  2.   

    blistener 就是一个 bool 值
      

  3.   

    我是直接用socket. 运行正常。
      

  4.   

    我这有个用socket的例子。不过server与client是分开的。server端:using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Data;
    // 新添加的命令空间
    using System.Net;
    using System.Net.Sockets;
    using System.Threading;
    using System.Text;
    using System.IO;namespace SocketServer
    {
    /// <summary>
    /// 服务器端。
    /// </summary>
    public class Form1 : System.Windows.Forms.Form
    {
    private System.Windows.Forms.RichTextBox richTextBox1;
    private System.Windows.Forms.Button button1;
            // 客户端节点
            private IPEndPoint      client;
            // 服务器端Socket
            private Socket          server;
            // 服务器端监听线程
            private Thread          thdSvr;
            // 网络数据流
            NetworkStream         stream;
            // 写数据流
            TextWriter         writer;
            // 读数据流
            TextReader         reader;
    /// <summary>
    /// 必需的设计器变量。
    /// </summary>
    private System.ComponentModel.Container components = null;
    // 监听线程
    private void ThreadServer()
    {
    client = new IPEndPoint(IPAddress.Any, 34567);
    server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    server.Blocking = true;
    server.Bind(client);
    server.Listen(0);
    while(true)
    {
    Socket t = server.Accept();
    if (t != null)
    {
    stream = new NetworkStream(t);
    writer = new StreamWriter(stream);
    reader = new StreamReader(stream);
    richTextBox1.Text += "接收到一个连接...\n";
    writer.WriteLine("欢迎连接到服务器!");
    writer.Flush();
    writer.WriteLine("您现在可以说话了...");
    writer.Flush();
    richTextBox1.Text += reader.ReadLine();
    richTextBox1.Text += "\n";
    reader.Close();
    writer.Close();
    stream.Close();
    t.Close();
    }
    }
    }
    public Form1()
    {
    //
    // Windows 窗体设计器支持所必需的
    //
    InitializeComponent();
    //
    // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
    //
    } /// <summary>
    /// 清理所有正在使用的资源。
    /// </summary>
    protected override void Dispose( bool disposing )
    {
    if(server != null)
    server.Close();
    if(!button1.Enabled)
    if(thdSvr != null)
    thdSvr.Abort();
    if( disposing )
    {
    if (components != null)
    {
    components.Dispose();
    }
    }
    base.Dispose( disposing );
    } #region Windows Form Designer generated code
    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {
    this.richTextBox1 = new System.Windows.Forms.RichTextBox();
    this.button1 = new System.Windows.Forms.Button();
    this.SuspendLayout();
    //
    // richTextBox1
    //
    this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Top;
    this.richTextBox1.Name = "richTextBox1";
    this.richTextBox1.Size = new System.Drawing.Size(416, 256);
    this.richTextBox1.TabIndex = 0;
    this.richTextBox1.Text = "";
    //
    // button1
    //
    this.button1.Location = new System.Drawing.Point(152, 264);
    this.button1.Name = "button1";
    this.button1.TabIndex = 1;
    this.button1.Text = "启动服务器";
    this.button1.TextAlign = System.Drawing.ContentAlignment.TopCenter;
    this.button1.Click += new System.EventHandler(this.button1_Click);
    //
    // Form1
    //
    this.AutoScaleBaseSize = new System.Drawing.Size(8, 18);
    this.ClientSize = new System.Drawing.Size(416, 296);
    this.Controls.AddRange(new System.Windows.Forms.Control[] {
      this.button1,
      this.richTextBox1});
    this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
    this.Name = "Form1";
    this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
    this.Text = "服务器";
    this.ResumeLayout(false); }
    #endregion /// <summary>
    /// 应用程序的主入口点。
    /// </summary>
    [STAThread]
    static void Main()
    {
    Application.Run(new Form1());
    }
            // 开始服务器端的运行。
    private void button1_Click(object sender, System.EventArgs e)
    {
    thdSvr = new Thread(new ThreadStart(this.ThreadServer));
    thdSvr.Start();
    button1.Enabled = false;
    }
    }
    }
      

  5.   

    client端:using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Data;
    // 新添加的命名空间。
    using System.Net;
    using System.Net.Sockets;
    using System.Text;
    using System.IO;namespace SocketClient
    {
    /// <summary>
    /// 客户端。
    /// </summary>
    public class Form1 : System.Windows.Forms.Form
    {
    private System.Windows.Forms.Button button1;
    private System.Windows.Forms.RichTextBox richTextBox1;
    /// <summary>
    /// 必需的设计器变量。
    /// </summary>
    private System.ComponentModel.Container components = null; public Form1()
    {
    //
    // Windows 窗体设计器支持所必需的
    //
    InitializeComponent(); //
    // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
    //
    } /// <summary>
    /// 清理所有正在使用的资源。
    /// </summary>
    protected override void Dispose( bool disposing )
    {
    if( disposing )
    {
    if (components != null)
    {
    components.Dispose();
    }
    }
    base.Dispose( disposing );
    } #region Windows Form Designer generated code
    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {
    this.button1 = new System.Windows.Forms.Button();
    this.richTextBox1 = new System.Windows.Forms.RichTextBox();
    this.SuspendLayout();
    //
    // button1
    //
    this.button1.Location = new System.Drawing.Point(168, 272);
    this.button1.Name = "button1";
    this.button1.TabIndex = 0;
    this.button1.Text = "连接";
    this.button1.TextAlign = System.Drawing.ContentAlignment.TopCenter;
    this.button1.Click += new System.EventHandler(this.button1_Click);
    //
    // richTextBox1
    //
    this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Top;
    this.richTextBox1.Name = "richTextBox1";
    this.richTextBox1.Size = new System.Drawing.Size(432, 264);
    this.richTextBox1.TabIndex = 1;
    this.richTextBox1.Text = "";
    //
    // Form1
    //
    this.AutoScaleBaseSize = new System.Drawing.Size(8, 18);
    this.ClientSize = new System.Drawing.Size(432, 304);
    this.Controls.AddRange(new System.Windows.Forms.Control[] {
                    this.richTextBox1,
                    this.button1});
    this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
    this.Name = "Form1";
    this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
    this.Text = "客户端";
    this.ResumeLayout(false);
    }
    #endregion /// <summary>
    /// 应用程序的主入口点。
    /// </summary>
    [STAThread]
    static void Main()
    {
    Application.Run(new Form1());
    } private void button1_Click(object sender, System.EventArgs e)
    {
        // 服务器IP地址
    IPAddress serIP;
    // 服务器节点
    IPEndPoint server;
    // 客户端Socket
    Socket client;
    // 客户端网络数据流
    NetworkStream stream;
    // 客户端写数据流
    TextWriter writer;
    // 客户端读数据流
    TextReader reader; serIP = IPAddress.Parse("127.0.0.1");
    server = new IPEndPoint(serIP,34567);
    client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    client.Connect(server);
    if(client.Connected)
    {
    stream = new NetworkStream(client);
    writer = new StreamWriter(stream);
    reader = new StreamReader(stream);
    richTextBox1.Text += "连接到服务器...\n";
    richTextBox1.Text += reader.ReadLine();
    richTextBox1.Text += reader.ReadLine();
    richTextBox1.Text += "\n";
    writer.WriteLine("你好,服务器,很高兴能和你通讯,谢谢。");
    writer.Flush();
    reader.Close();
    writer.Close();
    stream.Close();
    client.Close();
    }
    }
    }
    }