Her*_*che 13 java sockets client serversocket
假设Java有两种套接字:
想象一下两个过程的情况:
X =客户
Y =服务器
服务器进程Y:有一个"ServerSocket",即正在侦听TCP端口
客户端进程X:通过"Socket"向Y发送连接请求.
Y:然后该accept()方法返回一个新的客户端类型"Socket",
当它发生时,两个套接字得到"互连",
所以:客户端进程中的套接字,与服务器进程中的套接字相连.
然后:通过套接字X读/写就像通过套接字Y读/写.
现在,两个客户端套接字互连!!
但是......
如果我在同一个进程中创建两个Client套接字,我想让它们"互连"怎么办?
......甚至可能?
假设如何在不使用中间ServerSocket的情况下使两个客户端套接字互连?
我已经通过创建两个Thread来连续读取A和写B来解决它,而另一个用于读取B和写入A ......
但我认为这可能是更好的方式......(那些世界耗能的线程不是必需的使用客户端 - 服务器方法)
任何帮助或建议将不胜感激!谢谢
编辑:
应用示例:"现有服务器应用程序可以转换为客户端应用程序",例如VNC服务器,一个客户端套接字连接到VNC服务器,并创建其他客户端套接字(连接到中间服务器),然后应用程序互连两个客户端导致VNC服务器是客户端应用程序!然后,不需要公共IP.
VNCServer --- MyApp ---> |中间服务器| <---用户
Mar*_*aux 17
首先,不要将接受的客户端(服务器端)调用其套接字a Client Socket.这非常令人困惑.
假设如何在不使用中间ServerSocket的情况下使两个客户端套接字互连?
那是不可能的.你总是需要建立一个服务器端,它可以接受客户端.现在的问题是:连接的哪一侧应该是服务器端?
你决定要考虑的事情:
中间服务器
为什么不立即建立与VNCServer的连接?
但如果你真的想要它,你可以做出这样的情况:
/ VNCServer (Server Running) <---.
| |
LAN -| Connects to VNCServer
| |
\ MyApp (Server Running --> Accepts from Middle Server) <------.
|
(Through a router)
|
Middle server (Server Running --> Accepts client) ---> Connects to Your App
^
|
(Through a router)
|
Client --> Connects to Middle Server --°
这就是它没有第三台服务器的样子(我推荐你):
/ VNCServer (Server Running) <---.
| |
LAN -| Connects to VNCServer
| |
\ MyApp (Server Running --> Accepts Clients) <------.
|
(Through a router)
|
Client --> Connects to MyApp --------------------------°
编辑:
我想我现在明白了:
我们必须像这样想象你的情况:
Your Main Server (What you called middle server)
(1) | | (2)
/??????????????????/ \?????????????????\
| |
Your VNCServer <----------------------------> The client
(5) (3)
(1)VNCServer连接到主服务器.那么,主服务器就获得了VNCServer的IP.
(2)客户端连接到主服务器.
(3)现在主服务器知道服务器和客户端在哪里.然后他发送到服务器所在的客户端.然后客户端将连接到他从主服务器收到的IP.这当然是来自VNCServer的IP.
(5)正在运行的VNCServer是服务器以接受客户端.
现在可以启动桌面共享.
我认为这是你可以拥有的最值得推荐的情况.
当然用Java编写它是给你的.
| 归档时间: |
|
| 查看次数: |
37032 次 |
| 最近记录: |