2010-12-12 10 views
0

Ich versuche, eine Zeichenfolge über das Netzwerk zu senden, das ist mein Code: Wenn Siedas Netzwerk C# senden Daten über

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

    TcpClient client = new TcpClient(serverEndPoint); 
    Socket socket = client.Client; 

    byte[] data = Encoding.ASCII.GetBytes(response); 

    socket.Send(data, data.Length, SocketFlags.None); 

    socket.Close(); 
    client.Close(); 

Als ich es laufen habe ich System.Net.Sockets.SocketException

+0

Sind Sie sicher, dass an diesem Port etwas zu hören ist? Der Versuch, einen Socket für einen nicht vorhandenen Server zu öffnen, würde sicherlich zu einer Socket-Ausnahme führen. – tvanfosson

+6

Ich habe Sie vorübergehend abgelehnt, weil Sie die Nachricht, die mit der SocketException einherging, nicht präsentieren konnten. Wenn Sie dies möchten, testen Sie Ihre Anwendung erneut, und stellen Sie uns dann den Inhalt von "SocketException.Message" sowie den Typ und den "Message" Inhalt von InnerExceptions vor. Dies hilft uns, Ihre Probleme zu diagnostizieren. – TomTom

Antwort

3

Wenn Sie ein verbindungsloses Protokoll verwenden, müssen Sie vor dem Senden die Verbindung aufrufen, andernfalls sendet Send eine SocketException. Wenn Sie ein verbindungsorientiertes Protokoll verwenden, müssen Sie entweder Verbinden verwenden, um eine Remote-Host-Verbindung herzustellen, oder Accept verwenden, um eine eingehende Verbindung zu akzeptieren. Siehe Socket.Send Method (Byte[], Int32, SocketFlags)

Angenommen, Sie ein verbindungsloses Protokoll verwenden Sie den Code so sein sollte,

string response = "Hello"; 
IPAddress ipAddress = IPAddress.Parse("127.0.0.1"); 

if (ipAddress != null) 
{ 
    IPEndPoint serverEndPoint = new IPEndPoint(ipAddress, 25); 
    byte[] receiveBuffer = new byte[100]; 

    try 
    { 
     using (TcpClient client = new TcpClient(serverEndPoint)) 
     { 
      using (Socket socket = client.Client) 
      { 
       socket.Connect(serverEndPoint); 

       byte[] data = Encoding.ASCII.GetBytes(response); 

       socket.Send(data, data.Length, SocketFlags.None); 

       socket.Receive(receiveBuffer); 

       Console.WriteLine(Encoding.ASCII.GetString(receiveBuffer)); 
      } 
     } 
    } 
    catch (SocketException socketException) 
    { 
     Console.WriteLine("Socket Exception : ", socketException.Message); 
     throw; 
    } 
} 

Das nächste Mal versuchen, einschließlich der Ausnahmemeldung zu erklären, was falsch eigentlich ging.

Verwandte Themen