2016-12-09 3 views
0

Hallo Ich geschriebene einfache Client-Socket-Anwendung, wo Client eine Zeichenfolge an den Server senden, erhält Server und konvertiert die Zeichenfolge in Großbuchstaben und zurück an den Client senden. Client druckt die Nachricht vom Server zur Konsole. Aber wenn ich die Anwendung ausgeführt habe, bekomme ich 'Eingabe-String war nicht im richtigen Format' Fehler beim Konvertieren der Bytes vom Server erhalten. Da ich neu in der C# -Programmierung bin, kann mir jemand helfen zu verstehen, warum dieser Fehler kommt und wie man ihn löst?Eingabe-String war nicht im richtigen Format beim Arbeiten mit Sockets

Server.cs

using System; 
using System.Text; 
using System.Net; 
using System.Net.Sockets; 

namespace Server 
{ 
    public class ServerSocket 
    { 
     private int port; 
     private Socket serverSocket; 

     public ServerSocket(int port) 
     { 
      this.port = port; 
      serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 

      IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), port); 

      /* Associates a Socket with a local endpoint. */ 
      serverSocket.Bind(serverEndPoint); 

      /*Places a Socket in a listening state. 
      * The maximum length of the pending connections queue is 100 
      */ 
      serverSocket.Listen(100); 
     } 

     public void start() 
     { 
      Console.WriteLine("Starting the Server"); 

      /* Accept Connection Requests */ 
      Socket accepted = serverSocket.Accept(); 

      /* Get the size of the send buffer of the Socket. */ 
      int bufferSize = accepted.SendBufferSize; 
      byte[] buffer = new byte[bufferSize]; 

      /* Receives data from a bound Socket into a receive buffer. It return the number of bytes received. */ 
      int bytesRead = accepted.Receive(buffer); 

      byte[] formatted = new byte[bytesRead]; 

      for (int i = 0; i < bytesRead; i++) 
      { 
       formatted[i] = buffer[i]; 
      } 

      String receivedData = Encoding.UTF8.GetString(formatted); 
      Console.WriteLine("Received Data " + receivedData); 

      String response = receivedData.ToUpper(); 
      byte[] resp = Encoding.UTF8.GetBytes(response); 
      accepted.Send(resp, 0, resp.Length, 0); 

      Console.WriteLine("Press some key to close"); 
      Console.Read(); 
     } 
    } 
    class Server 
    { 
     static void Main(string[] args) 
     { 
      ServerSocket server = new ServerSocket(1234); 
      server.start(); 
     } 
    } 
} 

Client.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Net; 
using System.Net.Sockets; 

namespace client 
{ 
    public class ClientSocket{ 
     private Socket clientSocket; 
     private int port; 

     public ClientSocket(int port) 
     { 
      this.port = port; 
      clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
     } 

     public void start() 
     { 
      Console.WriteLine("Starting client socket"); 
      try 
      { 
       IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), port); 
       clientSocket.Connect(serverEndPoint); 

       Console.WriteLine("Enter some data to send to server"); 

       String data = Console.ReadLine(); 

       byte[] bytes = Encoding.UTF8.GetBytes(data); 

       clientSocket.Send(bytes); 

       Console.WriteLine("Closing connection"); 

       int receiveBufferSize = clientSocket.ReceiveBufferSize; 
       byte[] buffer = new byte[receiveBufferSize]; 


       int receivedBytes = clientSocket.Receive(buffer); 
       byte[] receivedData = new byte[receivedBytes]; 

       for(int i=0; i < receivedBytes; i++) 
       { 
        receivedData[i] = buffer[i]; 
        Console.WriteLine(receivedData[i]); 
       } 

       String received = Encoding.UTF8.GetString(receivedData); 

       Console.WriteLine("Response : {}", received); 

       Console.WriteLine("Press Enter to close"); 
       Console.Read(); 
       clientSocket.Close(); 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine("Error while connectiong to server {}", e.Message); 
      } 
     } 
    } 

    class Client 
    { 
     static void Main(string[] args) 
     { 
      ClientSocket clientSocket = new ClientSocket(1234); 
      clientSocket.start(); 

     } 
    } 
} 
+0

Es gibt keine Notwendigkeit, Ihren gesamten Code zu veröffentlichen geben Sie ein minimales Beispiel für Ihr Problem – mybirthname

+0

Ich würde durch googlen die Fehlermeldung beginnen. Ich würde dann den Call-Stack in der Ausnahme betrachten, um genau zu sehen, wo das Problem liegt. –

Antwort

1

Die Linie:

Console.WriteLine("Response : {}", received); 

sollte sein:

Console.WriteLine("Response : {0}", received); 
Verwandte Themen