TcpListener 将在您的服务器上运行,等待连接到特定端口。TcpClient 将用于连接到 192.168.xxx.xxx:xxxx 地址。因此,当您执行 Listener.Start 时,您正在侦听在侦听器运行的地址和端口上与侦听器建立的连接。本地地址确实意味着您正在侦听要建立的连接的地址地址。
如果要连接到远程 ip:port,则应尝试 TcpClient。一个简单的测试是查看您是否可以连接到 smtp 服务器或类似的东西。
编辑: - 包括一个非常粗略的示例,用于连接和发送/接收数据到 pop.google.com。
static void Main(string[] args)
{
Stream networkStream = null;
string hostName = "pop.gmail.com";
int port = 995;
TcpClient client = new TcpClient();
MemoryStream dataStream = new MemoryStream();
try
{
client.SendTimeout = 15000;
client.ReceiveTimeout = 15000;
client.Connect(hostName, port);
networkStream = new SslStream(client.GetStream(), true);
((SslStream)networkStream).AuthenticateAsClient(hostName);
const int ChunkSize = 256;
int bytesRead = 0;
const int BufferSize = 1024;
byte[] buffer = new byte[BufferSize];
//CONNECT SHOULD GET BANNER
string messageReceived;
using (dataStream = new MemoryStream())
{
do
{
bytesRead = networkStream.Read(buffer, 0, ChunkSize);
dataStream.Write(buffer, 0, bytesRead);
messageReceived = Encoding.UTF8.GetString(dataStream.ToArray());
} while (!messageReceived.EndsWith(Environment.NewLine));
Console.WriteLine("Response:{0}", Encoding.UTF8.GetString(dataStream.ToArray()));
}
buffer = Encoding.UTF8.GetBytes("USER test.net.user@gmail.com\r\n");
networkStream.Write(buffer, 0, buffer.Length);
buffer = new byte[BufferSize];
using (dataStream = new MemoryStream())
{
do
{
bytesRead = networkStream.Read(buffer, 0, ChunkSize);
dataStream.Write(buffer, 0, bytesRead);
messageReceived = Encoding.UTF8.GetString(dataStream.ToArray());
} while (!messageReceived.EndsWith(Environment.NewLine));
Console.WriteLine("Response:{0}", Encoding.UTF8.GetString(dataStream.ToArray()));
}
}
catch (Exception e)
{
Console.Write(e);
}
finally
{
if (networkStream != null)
{
networkStream.Dispose();
networkStream = null;
}
if (client != null)
{
if (client.Connected)
{
client.Client.Disconnect(false);
}
client.Close();
client = null;
}
}
Console.ReadKey();
}