开发客户端服务器程序。在客户端,我开发了一个发送数据和接收数据的程序。
我设法解析静态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();
}
}
}
}
答案 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构造函数中根据需要转换为字符串