2016-08-15 20 views
2

ソケット接続を介してクライアントからサーバーにデータを送信しようとしています。私は正常に最初のデータを送信しましたが、2番目のデータを送信しようとすると送信されません.3番目のデータを送信しようとすると、それは私に与えますSockets.SocketExceptionどうすれば解決できますか?サーバー/クライアントソケット接続

サーバー

byte[] buffer = new byte[1000]; 


     IPHostEntry iphostInfo = Dns.GetHostEntry(Dns.GetHostName()); 
     IPAddress ipAddress = iphostInfo.AddressList[0]; 
     IPEndPoint localEndpoint = new IPEndPoint(ipAddress, 8080); 

     Socket sock = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp); 


     sock.Bind(localEndpoint); 
     sock.Listen(5); 



     while (true) { 
      Socket confd = sock.Accept(); 

      string data = null; 

      int b = confd.Receive(buffer); 

      data += Encoding.ASCII.GetString(buffer, 0, b); 

      Console.WriteLine("" + data); 

      confd.Close(); 
     } 

クライアント

byte[] data = new byte[10]; 

     IPHostEntry iphostInfo = Dns.GetHostEntry(Dns.GetHostName()); 
     IPAddress ipAdress = iphostInfo.AddressList[0]; 
     IPEndPoint ipEndpoint = new IPEndPoint(ipAdress, 8080); 

     Socket client = new Socket(ipAdress.AddressFamily, SocketType.Stream, ProtocolType.Tcp); 


     try { 

      client.Connect(ipEndpoint); 
      Console.WriteLine("Socket created to {0}", client.RemoteEndPoint.ToString()); 


      while (true) { 

       string message = Console.ReadLine(); 
       byte [] sendmsg = Encoding.ASCII.GetBytes(message); 
       int n = client.Send(sendmsg); 
      } 


     } 
     catch (Exception e) { 
      Console.WriteLine(e.ToString()); 
     } 

     Console.WriteLine("Transmission end."); 
     Console.ReadKey(); 
+1

あなたのサーバーで接続した後に1文字列を受信し、接続を閉じるためです。 – BugFinder

+0

しかし、もう一度開いていませんか? – Pareidolia

+0

あなたのクライアントはクロージャのフォームを表示しません...あなたのコードをトレースすると、何が間違っているかが表示されます – BugFinder

答えて

2

さて、どのような愚かな間違い。ここに解決策があります。一度ソケットを受け入れるべきです。ソケットに関するすべての文書があった場合

Socket confd = sock.Accept(); 
while (true) { 
    //Socket confd = sock.Accept(); 
    string data = null; 
    int b = confd.Receive(buffer); 
    data += Encoding.ASCII.GetString(buffer, 0, b); 
    Console.WriteLine("" + data); 
    //confd.Close(); 
} 

に変更

while (true) { 
    Socket confd = sock.Accept(); 
    string data = null; 
    int b = confd.Receive(buffer); 
    data += Encoding.ASCII.GetString(buffer, 0, b); 
    Console.WriteLine("" + data); 
    confd.Close(); 
} 

、それをしてくださいコメント。私は読んでみたい。

+0

http://blog.stephencleary.com/2009/04/tcpip-net-sockets-faq.html – ntohl

関連する問題