2016-06-20 9 views
1

Im Entwickeln eines Client-Server-Programms. Auf der Client-Seite habe ich ein Programm entwickelt, das Daten sendet und Daten empfängt.Client/Server-Programmierung, System.net.IPAddress kann nicht in String konvertiert werden

Ich habe es geschafft, eine statische IP-Adresse zu analysieren, aber ich habe versucht, mit IPAddress.Any, aber es gibt diesen Fehler zurück. (System.net.IPAddress kann nicht in String konvertiert werden).

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

namespace client 
{ 
    class HMSClient 
    { 
     static void Main(string[] args) 
     { 
      try 
      { 
       //---Connect to a port 
       Console.Write("Input port" + System.Environment.NewLine); 
       int PORT_NO = int.Parse(Console.ReadLine()); 
       Console.Write("Input a Command" + System.Environment.NewLine); 
       while (true) 
       { 
        //---data to send to the server--- 
        string commands = Console.ReadLine(); 

        //---create a TCPClient object at the IP and port no.--- 
        //IPAddress SERVER_IP = Dns.GetHostEntry("localhost").AddressList[0]; 

        TcpClient client = new TcpClient(IPAddress.Any, PORT_NO); 

        NetworkStream nwStream = client.GetStream(); 
        byte[] bytesToSend = Encoding.ASCII.GetBytes(commands); 

        //---send the command--- 
        Console.WriteLine("Command: " + commands); 
        nwStream.Write(bytesToSend, 0, bytesToSend.Length); 

        //---read back the response 
        byte[] bytesToRead = new byte[client.ReceiveBufferSize]; 
        int bytesRead = nwStream.Read(bytesToRead, 0, client.ReceiveBufferSize); 
        Console.WriteLine("Response: " + Encoding.ASCII.GetString(bytesToRead, 0, bytesRead)); 
       } 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine("Client cannot find target to send the command" + Environment.NewLine + e); 
       Console.ReadLine(); 
      } 
     } 
    } 
} 
+0

warum Sie den Client Sie neu erstellen und jede Iteration immer wieder verbinden? –

+0

Ich meine, ich könnte sie aus der Schleife bewegen, aber ja, das sollte vor einer Weile getan werden. – Freon

+0

würde es wahrscheinlich weniger Ressourcen fordern. –

Antwort

1

Die TcpClient Constructor (String, Int32) Sie verwenden wie folgt definiert ist:

public TcpClient(
    string hostname, 
    int port 
) 

Also als 1. Argument wird eine String benötigt und C# kann nicht IPAddress implizit in eine String konvertieren. Sie müssen ToString() auf Ihrem IPAddress verwenden.

TcpClient client = new TcpClient(IPAddress.Any.ToString(), PORT_NO); 

Hinweis:IPAddress.Any Denken Sie daran, representates den String 0.0.0.0, die mit einem nimmt TcpClient

+1

Aha! Ich habe vorher ohne den() -Tostring hinzugefügt, was mir den Fehler gab. Es ist der Grund, warum ich verwirrt wurde, danke! – Freon

+0

Ich bekomme diesen Fehler IPv4-Adresse 0.0.0.0 und IPv6-Adresse :: 0 sind nicht angegebene Adressen, die nicht als Zieladresse verwendet werden können. Hast du eine Idee, was passiert ist? Ich fühle mich wie ein Konflikt in irgendeiner Form. – Freon

+0

ja ein TcpClient benötigt eine gültige IPAdress, um eine Verbindung zu einer '0.0.0.0' herzustellen, ist keine gültige IPAddress. Sie müssen dort eine gültige Ziel-IPAdresse eingeben. –

0

Sie .ToString nach .Any verwenden coud und es wird in einen String umgewandelt werden, wie Sie in den Konstruktor TcpClient benötigen

1

TcpClient Konstruktor keine gültige IPAddress verbinden ist eine Zeichenfolge als erstes Argument kein IpAddress Objekt.

TcpClient client = new TcpClient(IpAddress.Any.ToString(), PORT_NO); 

oder als IpAddress.Any ist eigentlich "0.0.0.0"

TcpClient client = new TcpClient("0.0.0.0", PORT_NO); 
Verwandte Themen