2014-12-19 3 views
0

여기에 클라이언트 서버 통신을 사용하는 소켓에 익숙해지면서 제 코드가 있습니다. 나는 로컬 호스트에서 통신 할 양식을 사용하여 하나 개의 .cs 파일을 작성하고 서버 표지 부분의 라벨에 클라이언트 표지 부분에서 (텍스트 상자)에서 텍스트를 표시하려면하고소켓 통신 출력 문제

//server partl 
     try 
     { 
      IPAddress ipAd = IPAddress.Parse("127.0.0.1"); //use local m/c IP address, and use the same in the client 

      /* Initializes the Listener */ 
      TcpListener myList = new TcpListener(ipAd, 8020); 

      /* Start Listeneting at the specified port */ 
      myList.Start(); 


      Socket s = myList.AcceptSocket(); 
      Console.WriteLine("Connection accepted from " + s.RemoteEndPoint); 

      byte[] b = new byte[100]; 
      int k = s.Receive(b); 
      //Console.WriteLine("Recieved..."); 

      //Writes to label1 
      for (int i = 0; i < k; i++) 
       label1.Text = b[i].ToString(); 



      //ASCII endoing to use ACK. 
      ASCIIEncoding asen = new ASCIIEncoding(); 
      s.Send(asen.GetBytes("The string was recieved by the server.")); 
      Console.WriteLine("\nSent Acknowledgement"); 

      /* clean up */ 
      s.Close(); 
      myList.Stop(); 


     } 
     catch (Exception ex) 
     { 
      Console.WriteLine("Error..... " + ex.StackTrace); 
     } 


     //Client part 

     try 
     { 
      TcpClient tcpclnt = new TcpClient(); 
      Console.WriteLine("Connecting....."); 

      tcpclnt.Connect("127.0.0.1", 8020); // use the ipaddress as in the server program 

      Console.WriteLine("Connected"); 
      Console.Write("Enter the string to be transmitted : "); 

      //gets the text from textbox 
      String str = textBox1.Text; 
      Stream stm = tcpclnt.GetStream(); 

      ASCIIEncoding asen = new ASCIIEncoding(); 
      byte[] ba = asen.GetBytes(str); 
      Console.WriteLine("Transmitting....."); 

      stm.Write(ba, 0, ba.Length); 

      byte[] bb = new byte[100]; 
      int k = stm.Read(bb, 0, 100); 

      for (int i = 0; i < k; i++) 
       Console.Write(Convert.ToChar(bb[i])); 


      tcpclnt.Close(); 

     } 

     catch (Exception ex) 
     { 
      Console.WriteLine("Error..... " + ex.StackTrace); 
     } 


    } 

.

왜 그런 출력이 나오는지 알 수 있습니다. 소켓에 새로운! 소켓 대신 루프의 데이터를 수신 할 때

enter image description here

+0

모든 오류를 버리기 때문에 아무 것도 표시하지 않을 수도 있습니다. – usr

답변

1

단순히 이것을 사용 : 단순히 소켓 주위의 래퍼입니다하여 TcpClient를 사용하여 데이터를 전송 및 수신에 대한

if (k > 0) 
    label1.Text = Encoding.UTF8.GetString(b); 

은 또한 당신이 this를 사용할 수 있습니다.