客户端/服务器编程,无法将System.net.IPAddress转换为String

时间:2016-06-20 10:17:21

标签: c#

开发客户端服务器程序。在客户端,我开发了一个发送数据和接收数据的程序。

我设法解析静态IP地址,但我尝试使用IPAddress.Any,但它返回该错误。 (无法将System.net.IPAddress转换为String)。

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();
            }
        }
    }
}

3 个答案:

答案 0 :(得分:1)

您正在使用的TcpClient Constructor (String, Int32)定义如下:

public TcpClient(
    string hostname,
    int port
)

因此,作为第一个参数,需要String,而C#无法将IPAddress隐式转换为String。因此,您需要在IPAddress上使用ToString()

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

提示:请记住IPAddress.Any代表字符串0.0.0.0,该字符串IPAddress无法与TcpClient <连接/ p>

答案 1 :(得分:1)

TcpClient构造函数将字符串作为第一个参数而不是IpAddress对象。

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

或者作为IpAddress.Any实际上是&#34; 0.0.0.0&#34;

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

答案 2 :(得分:0)

你可以在.Any之后使用.ToString,它将在TcpClient构造函数中根据需要转换为字符串