服务端:  
private  void  Form1_Load(object  sender,  EventArgs  e)  
               {  
                       thread  =  new  Thread(new  ThreadStart(get));  
                       thread.Start();  
               }  
 
               private  void  get()  
               {  
                       socket  =  new  Socket(AddressFamily.InterNetwork,  SocketType.Stream,  ProtocolType.Tcp);  
                       IPEndPoint  ipe  =  new  IPEndPoint(IPAddress.Parse(getip()),  10);  
                       socket.Bind(ipe);  
                         
                       isStart  =  true;  
                       byte[]  buff  =  new  byte[1024];  
                       while  (isStart)  
                       {  
                               socket.Listen(10);  
                               Socket  conSocket  =  socket.Accept();  
                               conSocket.Receive(buff);  
                               string  s  =  Encoding.Default.GetString(buff);  
                               updateui(s);      //在textbox显示  
                               Thread.Sleep(200);  
                       }  
               }  
 
客户端:  
private  void  button1_Click(object  sender,  EventArgs  e)  
               {  
                       socket  =  new  Socket(AddressFamily.InterNetwork,  SocketType.Stream,  ProtocolType.Tcp);  
                       IPEndPoint  ipe=new  IPEndPoint(IPAddress.Parse("192.168.0.3"),10);  
                       socket.Connect(ipe);  
                       if  (socket.Connected)  
                       {  
                               MessageBox.Show("链接上了!");  
                       }  
                       else  
                       {  
                               MessageBox.Show("没有链接!");  
                       }  
               }  
 
               private  void  button2_Click(object  sender,  EventArgs  e)  
               {  
                       string  s  =  this.richTextBox1.Text.Trim();  
                       byte[]  buff  =  Encoding.Default.GetBytes(s);  
                       socket.Send(buff);  
               }  
 
第一次点击发送后,正常,可以显示信息,  
但第二次后就不能正常显示了,  
我在updateui那设断点,  
发现第二次点击后都不能执行到那,这是为什么啊?  
 
怎么解决啊?大侠们帮忙啊!急!  
分不够可以加!

解决方案 »

  1.   

    while  (isStart)  
                           {  
                                   socket.Listen(10);  
                                   Socket  conSocket  =  socket.Accept();  
                                   conSocket.Receive(buff);  
                                   string  s  =  Encoding.Default.GetString(buff);  
                                   updateui(s);      //在textbox显示  
                                   Thread.Sleep(200);  
                           }  我记得服务端的这块应该调整一下socket.Listen(10);  
    Socket  conSocket  =  socket.Accept();  似乎应该放到循环外边,否则第一次接受后的状态是等待连接,而不是等待接收
      

  2.   

    socket.Listen(10);  
    while  (isStart)  
     {  
          Socket  conSocket  =  socket.Accept();  
          conSocket.Receive(buff);  
          string  s  =  Encoding.Default.GetString(buff);  
          updateui(s);      //在textbox显示  
          Thread.Sleep(200);  
      }  
      

  3.   

    还有updateui(s);      //在textbox显示  
    可能有问题
    你是不是在vs2005里面通过inoke来更新textbox的?
      

  4.   

    Thread.Sleep(200);  去掉!!!
      

  5.   

    我也有把thread.Sleep(200)去掉,可是还是一样啊,不同的是,可以多个客户端连接了,但是,发送一次,就要点击一次连接按钮,不然收不到,不知道为什么!
      

  6.   

    你把socket.listen放到while外面试试看
      

  7.   

    已经试了啊,现在的代码是:
    private void get()
            {
                socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                IPEndPoint ipe = new IPEndPoint(IPAddress.Parse(getip()), 10);
                socket.Bind(ipe);            
                isStart = true;            
                socket.Listen(10);
                
                while (isStart)
                {   
                    Socket conSocket = socket.Accept();
                    byte[] buff = new byte[1024];
                    conSocket.Receive(buff);
                    string s = Encoding.Default.GetString(buff);
                    updateui(s);
                }
            }
      

  8.   

    ismycxp:你的程序会卡在socket.Accept()处,要想接受多个连接这个结构是不成的,要用多线程或者异步socket的
      

  9.   

    ...scoket.Accept()
    服务端的连接为最新的客户端连接,而且每次接收数据都要等待连接重开一个线程 用来接收数据
      

  10.   

    如果是多线程就是一个Listen线程,然后每接到一个Accept消息,就开一个Receive线程我一般用的是异步操作,参考的网上的一个.net的异步Socket构架,不过那个构架问题多多
      

  11.   

    代码看起来没问题,但是svr的缓冲区有问题,有时会错乱的,缓冲应该放到session内部
      

  12.   

    兄弟,我也遇上了客户端能连续发送,而服务器端只能接收第一次的数据,而后就一直停在
    accept上了。你现在有每有解决啊,解决了告诉我声啊