黑马程序员技术交流社区

标题: Socket问题 [打印本页]

作者: 王进亮    时间: 2012-12-20 14:22
标题: Socket问题
本帖最后由 王进亮 于 2012-12-22 20:32 编辑

在Socket编程中,客户的使用要依赖于服务端的开启,然后以阻塞方法等待客户端连接,连接成功即可进行数据交换。
我想问的是如果想让两个客户端之间进行数据交换,是通过服务端接收数据进行中转的?还是有一个通信管道让两个客户端直接进行数据交换?
作者: 熊永标    时间: 2012-12-21 09:36
有两种情况:
第一种就是如果两个客户端在一个网段内或者都连接到了公网上,那么可以通过服务器进行握手后,分别得到对方客户端的信息,如IP后,就可以相互连接通信。之后,就与服务器无关了。
第二种就是如果两个客户端不在个网段内,也就是说外面的计算机访问本机不可达,这两个客户机都是通过网关(路由器等)进行连网,那就需要能网穿透技术,把两台客户机打通之后,就可以连接了。连接之后,与服务器没关系了。qq就是这样的,这过程需要服务器做为第三者进行中介。详细请参考NAPT
像你说的那样,对于数据小还可以,要是像qq这个级别,服务器受不的,而且如果还要视频的话,更加糟糕。服务器会死掉的。
作者: 罗海清    时间: 2012-12-21 11:53
1、通过服务器来转发,是cs模式,
2、通过两个客户端直接通信的,是点对点模式。
3、这两种都可以做到。如果采用cs,则客户端A要把发送给客户端B的消息封装,
在消息中加入B的ip地址和端口号。 然后,在服务端通过截取字符串,解析出ip地址和端口号。
4、无论采用哪种方式,要在服务器注册,因为一关机,可能你的ip地址就改变了。






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2