
[英]How to redirect input and output of a Process over a TCP socket connection? (java)
[英]Redirect a TCP connection
我有一些像我的客户端和实际视频服务器(用c ++制作)之间运行的代理服务器(用java编写)。 客户端发送的所有内容都通过此代理进行,然后重定向到服务器。
它工作正常,但我有一些问题,并认为如果我可以使这个代理服务器只听取客户端请求,然后以某种方式告诉服务器已从客户端发出请求,它会更好应该直接与客户端建立连接。
基本上在TCP级别我想要发生的事情是这样的:
1-只要客户端向我的代理发送SYN,代理就会向真实服务器发送一条消息,告诉客户端的IP和端口。
2-然后,服务器将相应的SYN-ACK发送到指定的客户端,在客户端和服务器之间创建直接连接。
然后,代理只是将初始请求(但不是后来的数据传输)中继到实际服务器。 我只是不知道这是否可能。
非常感谢你
尼尔森R.佩雷斯
这是一些游戏(和Fog Creek CoPilot)的做法,但它需要服务器和客户端的支持。 基本上代理必须对客户端和服务器说“尝试直接在这个ip和这个端口上进行通信”,如果他们无法通过(因为其中一个或两个都在NAT或防火墙后面),他们会回归到通过代理。
我在http://www.brynosaurus.com/pub/net/p2pnat/找到了“点对点tcp打孔”这个很好的描述。
代理和服务器是否位于同一台计算机上? 如果是这样,您可以使用Socket Transfer或文件描述符传递将连接传递给服务器。 你可以在C找到例子,
http://www.wsinnovations.com/softeng/articles/uds.html
如果它们位于不同的计算机上,则无法将连接传递给服务器。 但是,可以使用VIP(虚拟IP)将IP数据包代理到服务器。 这是在套接字下面,所以你必须使用链接层接口,如DLPI 。
您没有像这样控制用户空间中的TCP握手。 这就是防火墙/路由器所做的事情,但这一切都发生在内核中。 看看您的平台的防火墙软件 - 您甚至可能不需要编写任何代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.