Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 重定向TCP连接_Java_C++_Tcp_Connection - Fatal编程技术网

Java 重定向TCP连接

Java 重定向TCP连接,java,c++,tcp,connection,Java,C++,Tcp,Connection,我有一个代理服务器(用java编写)在我的客户机和实际的视频服务器(用c++制作)之间运行。客户端发送的所有内容都通过此代理,然后重定向到服务器 它工作得很好,但是我有一些问题,我认为如果我可以让这个代理服务器只监听客户端的请求,然后告诉服务器已经从客户端发出了请求,并且应该直接与客户端建立连接,那会更好 基本上,在TCP级别,我希望发生的事情是这样的: 1-每当客户端向我的代理发送SYN时,代理只会向实际服务器发送一条消息,告知客户端的ip和端口 2-然后服务器将相应的SYN-ACK发送到指定

我有一个代理服务器(用java编写)在我的客户机和实际的视频服务器(用c++制作)之间运行。客户端发送的所有内容都通过此代理,然后重定向到服务器

它工作得很好,但是我有一些问题,我认为如果我可以让这个代理服务器只监听客户端的请求,然后告诉服务器已经从客户端发出了请求,并且应该直接与客户端建立连接,那会更好

基本上,在TCP级别,我希望发生的事情是这样的:

1-每当客户端向我的代理发送SYN时,代理只会向实际服务器发送一条消息,告知客户端的ip和端口

2-然后服务器将相应的SYN-ACK发送到指定的客户端,在客户端和服务器之间创建直接连接

然后,代理将只是将初始请求(而不是稍后的数据传输)中继到实际的服务器。我只是不知道这是否可能

多谢各位


Nelson R.Perez

有些游戏(和Fog Creek副驾驶)就是这样做的,但它需要服务器和客户端的支持。基本上,代理必须对客户机和服务器说“尝试直接在这个ip和这个端口上与进行通信”,如果他们无法通过(因为其中一个或两个都在NAT或防火墙后面),他们会返回到代理


我在

中找到了“点对点tcp打孔”这一很好的描述,你无法像那样控制用户区中的tcp握手。这是防火墙/路由器所做的,但都发生在内核中。看看你平台上的防火墙软件——你甚至不需要编写任何代码。

代理和服务器是否在同一台机器上?如果是这样,您可以使用套接字传输或文件描述符传递将连接传递到服务器。你可以在这里找到C语言的例子


如果它们位于不同的计算机上,则无法将连接传递到服务器。但是,可以使用VIP(虚拟IP)将IP数据包代理到服务器。这是在套接字下面,所以您必须使用链接层接口,比如。

好的,我收回这一点-看起来副驾驶没有这样做,或者如果他们这样做了,他们就停止了。看见