Nat越えしてみよう
[1] サーバーに一時的に配布されたIPとPortを教えてもらう
Dartで書いてみよう
Server側のコード
import 'dart:io';
import 'dart:convert';
main(List<String> args) async {
String svAddr = args[0];
int svPort = int.parse(args[1]);
startUDPServer(svAddr, svPort);
startTCPServer(svAddr, svPort);
}
startUDPServer(String svAddr, int svPort) async {
RawDatagramSocket socket = await RawDatagramSocket.bind(svAddr, svPort, reuseAddress: true);
socket.listen((RawSocketEvent event) {
if (event == RawSocketEvent.READ) {
Datagram dg = socket.receive();
String content = "${dg.address.address},${dg.port}\n";
socket.send(UTF8.encode(content), dg.address, dg.port);
}
});
}
startTCPServer(String host, int port) async {
ServerSocket server = await ServerSocket.bind(host, port);
server.listen((Socket socket) {
String content = "${socket.remoteAddress.address},${socket.remotePort}\n";
socket.add(UTF8.encode(content));
});
}Client側のコード
TCP よりも UDPの方がP2Pに向いている
[2] 他のサーバーからもアクセスしてもらう
一時的なIPが変わる場合でも、P2P接続できる
前もって試しておこう!!
Server側
Client側
STUN の分類方法
Last updated