Я сделал создание клиент/сервер учебник Приводимые здесьHaxe: подключение к удаленному хосту
http://old.haxe.org/doc/neko/client_server,
, но этот пример только действительно относится к случаю локального хоста, который довольно ограничен утилита. Я надеялся, что кто-то может объяснить, как расширить это на случай подключения к удаленному хосту. В частности, если кто-то знает, как изменить этот пример, чтобы я мог запускать код сервера с ноутбука дома и иметь друга (который знает мой домашний ip), запускать клиент.
код клиента: Код
// file Client.hx
class Client {
static function main() {
var s = new sys.net.Socket();
s.connect(new sys.net.Host("localhost"),5000);
while(true) {
var l = s.input.readLine();
trace(l);
if(l == "exit") {
s.close();
break;
}
}
}
}
Сервер:
// file Server.hx
class Server {
static function main() {
var s = new sys.net.Socket();
s.bind(new sys.net.Host("localhost"),5000);
s.listen(1);
trace("Starting server...");
while(true) {
var c : sys.net.Socket = s.accept();
trace("Client connected...");
c.write("hello\n");
c.write("your IP is "+c.peer().host.toString()+"\n");
c.write("exit");
c.close();
}
}
}
Как отказ, я очень мало знаю о протоколах связи, поэтому прошу прощения, если вопрос глупый.
Edit:
Если я заменить «локальный хост» с моим локальным IP-адресом «192.168.1.254» это по-прежнему работает, но если я заменю «локальный» с моим общественной IP-адресом «206.XXX.XXX. XXX ", клиент не подключается (это было первое, что я пробовал).
Я отключил свой брандмауэр как для входящего, так и исходящего трафика на этом порту, но, похоже, это не имеет значения. Почему мой клиентский экземпляр может подключаться только к экземпляру сервера локально? Я бы хотел, чтобы это изменило клиентский код, чтобы использовать общедоступный IP-адрес компьютера, маршрутизирующего запрос через маршрутизатор.
Edit:
Оказывается, что это было на самом деле работает все вместе с адресом IP публики, но по какой-то причине он не может подключиться к общественному IP маршрутизатора из моей локальной сети (я до сих пор не понимаю почему это было проблемой - возможно, какая-то странная проблема NAT с маршрутизатором). С помощью этой утилиты:
http://www.yougetsignal.com/tools/open-ports/
Я был в состоянии проверить, что соответствующие порты были открыты, и подключиться к программе сервера.
Имейте в виду, что ваш друг, вероятно, не увидит ваш компьютер, даже если он знает ip вашего домашнего подключения из-за NAT. – npretto
Как вы можете обойти это? –
Вам нужно выполнить поиск по «переадресации портов» на вашем маршрутизаторе (он изменяется для каждой марки/модели), вам в основном нужно сопоставить некоторый порт вашего общедоступного ip с другим портом вашего компьютера. Если вы не знаете, что такое NAT, я рекомендую вам Google, что у меня нет ссылки для этого, так как я изучал его в школе, но это довольно интересно, и, вероятно, вы не можете заниматься сетевыми процессами, не зная. – npretto