Я использую примеры, предоставленные Microsoft, чтобы узнать, как использовать TCP-серверы на C#. Для TCPListener я использую этот http://msdn.microsoft.com/en-us/library/system.net.sockets.tcplistener.aspx, а для TCPCLient я использую этот http://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient.aspx (примеры приведены в нижней части страницы).Использование TCP вне локальной сети
До сих пор мне удалось подключить и отправить сообщения на другие ПК, подключенные к одному маршрутизатору. Теперь я хочу подключить его к ПК за пределами локальной сети. Как я могу это сделать ?
Я должен также упомянуть, что это путь, который я использую для подключения к компьютеру в локальной сети:
на þér стороне сервера:
public string LocalIPAddress()
{
IPHostEntry host;
string localIP = "";
host = Dns.GetHostEntry(Dns.GetHostName());
foreach (IPAddress ip in host.AddressList)
{
if (ip.AddressFamily == AddressFamily.InterNetwork)
{
localIP = ip.ToString();
break;
}
}
return localIP;
}
private void Form1_Load(object sender, EventArgs e)
{
TcpListener server = null;
try
{
// Set the TcpListener on port 13000.
Int32 port = 13000;
String localAddrString = LocalIPAddress();
Console.WriteLine(localAddrString);
IPAddress localAddr = IPAddress.Parse(localAddrString);
// TcpListener server = new TcpListener(port);
server = new TcpListener(localAddr, port);
// Start listening for client requests.
server.Start();
} }
на стороне клиента:
Int32 port = 13000;
String server = "192.168.X.X"; // here I manually introduce the IP provided by the server in the console
TcpClient client = new TcpClient(server, port);
Нет никакой разницы. Вы просто используете адрес хоста, к которому хотите подключиться. Пока этот адрес маршрутизируется через сеть (интрасеть, интернет, не имеет значения), и порт открыт для хоста назначения, он должен работать. Ты пробовал? – David
@ Давид, да, я сделал, и это не сработало. Я использовал свой Ip, как показано на http://whatismyipaddress.com/. Используя те же ПК в локальной сети, он работает, но за его пределами это не так. – TheQuestioner
Все, что между клиентом и сервером может блокировать соединение. Если вы пытаетесь подключиться извне живого подключения к внутреннему соединению, вам нужно будет проверить, открыт ли порт на вашем маршрутизаторе и на кабеле/dsl/etc. аппаратное обеспечение. – David