为什么服务端接收同一客户端一次数据后 就再也收不到这个客户端的数据了?

解决方案 »

  1.   

    楼主用什么通信的?remoting???有租约期的貌似,请详细说明
      

  2.   

    socket??? 贴代码 无图无真相
      

  3.   


    private void SocketReceivedata()
    {
                
              int port = 8888;
              string recvdata = string.Empty;//接受的数据
               string senddata = string.Empty;//发送数据
               string ipstr = string.Empty;
              byte[] data = new byte[20 * 1024];
              int recv;//用于表示客户端发送的信息长度
               IPEndPoint ipep = new IPEndPoint(IPAddress.Any, port);//本机预使用的IP和端口 
               newsock.Bind(ipep);//绑定
               newsock.Listen(10);//监听
                try
                {
                    while (true)
                    {
                        //用死循环来不断的从客户端获取信息
                        
                        client = newsock.Accept();
                        IPEndPoint clientip = (IPEndPoint)client.RemoteEndPoint;
                        if (client.Connected)
                        {
                            
                                byte[] sdata = new byte[10 * 1024];
                                recv = client.Receive(data);                            if (recv == 0)//当信息长度为0,说明客户端连接断开
                                    return;
                                recvdata = Encoding.UTF8.GetString(data, 0, recv);
                                senddata = "ok";
                                sdata = Encoding.UTF8.GetBytes(senddata);
                                client.Send(sdata, sdata.Length, SocketFlags.None);
                                
                          
                        }
                    }
                }
                catch (SocketException)
                {
                    return;
                }
    }
      

  4.   

    if (recv == 0)  
    return;
    这个是不是有问题?
      

  5.   

    代码不是这样写的,要分两个循环,一个循环是不断的接入客户的连接,另一个循环是不断的接入用户的数据。也就是
     client = newsock.Accept();
     这个要在另外一个死循环里才行,不然的话,你的代码接收一次客户端连接,且在收完客户的数据之后,开始下一次循环时,
    你的那个client就会被下一个连接进来的客户给覆盖了,而之前的那个客户端连接就会在空闲的时候被系统断开,
      

  6.   

    client = newsock.Accept();
    必须在最后面再调用一次,
      

  7.   


    private void SocketReceivedata()
    {
                
              int port = 8888;
              string recvdata = string.Empty;//接受的数据
               string senddata = string.Empty;//发送数据
               string ipstr = string.Empty;
              byte[] data = new byte[20 * 1024];
              int recv;//用于表示客户端发送的信息长度
               IPEndPoint ipep = new IPEndPoint(IPAddress.Any, port);//本机预使用的IP和端口 
               newsock.Bind(ipep);//绑定
               newsock.Listen(10);//监听
                try
                {
                    while (true)
                    {
                        //用死循环来不断的从客户端获取信息
                        
                        client = newsock.Accept();
                        IPEndPoint clientip = (IPEndPoint)client.RemoteEndPoint;
                        if (client.Connected)
                        {
                                while(true)
                               {
                                byte[] sdata = new byte[10 * 1024];
                                recv = client.Receive(data);                            if (recv == 0)//当信息长度为0,说明客户端连接断开
                                    return;
                                recvdata = Encoding.UTF8.GetString(data, 0, recv);
                                senddata = "ok";
                                sdata = Encoding.UTF8.GetBytes(senddata);
                                client.Send(sdata, sdata.Length, SocketFlags.None);
                                }
                          
                        }
                    }
                }
                catch (SocketException)
                {
                    return;
                }
    }这样加个加个循环?
      

  8.   


    这样改,和没有改有什么区别你最好是开两个线程,
    函数1
    List<Socket> list = new List<Socket>();
    while(true)
    {
         client = newsock.Accept();
         //然后把这个client加入到一个队列或是其它的什么,比如List
          list.Add(client);
    }函数2
    while(true)
    {
         foreach( Socket client in list)
         {
              在这里面接收每个Socket的数据
         }
    }