问题如下。这是我当前没有成功的测试代码。
static void Main(string[] args)
{
if (args.Count() != 3)
{
Console.WriteLine("Bad args");
}
var ep = new IPEndPoint(IPAddress.Parse(args[0]), int.Parse(args[1]));
var lp = new IPEndPoint(IPAddress.Any, int.Parse(args[2]));
var s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
s.Bind(lp);
var c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
c.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
c.Bind(lp);
Task.Run(() => { try { c.Connect(ep); } catch { } });
s.Listen(10);
var v = s.Accept();
v.Close();
}
如何进行 TCP 打孔?我正在使用远程服务器进行测试。我在跑步wget local_public_ip:port/test
。我的路由器设置为端口 80,因此不需要打孔。我的代码建立了联系。现在我尝试其他端口,但我无法完全弄清楚如何打孔。
我所做的是(C#代码)
var l = new TcpListener(8090);
l.Start();
try { var o = new TcpClient(); o.Connect("myserverip", 123); }
catch(Exception ex) {}
var e = l.AcceptSocket();
Console.WriteLine(e.RemoteEndPoint.AddressFamily);
我想也许我需要在 out tcp 连接上设置本地端点。
TcpClient(new System.Net.IPEndPoint(new System.Net.IPAddress(bytearray), port));
我犯了一个错误,得到了这个例外
The requested address is not valid in its context
修复字节数组192,168,1,5
似乎可以使传出连接正确。现在我已经使用我的侦听端口与远程 IP 建立了连接,我认为 wget 将能够连接到我。事实并非如此
如何进行 TCP 打孔?