A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王进亮 中级黑马   /  2012-12-20 14:22  /  1793 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王进亮 于 2012-12-22 20:32 编辑

在Socket编程中,客户的使用要依赖于服务端的开启,然后以阻塞方法等待客户端连接,连接成功即可进行数据交换。
我想问的是如果想让两个客户端之间进行数据交换,是通过服务端接收数据进行中转的?还是有一个通信管道让两个客户端直接进行数据交换?

2 个回复

倒序浏览
有两种情况:
第一种就是如果两个客户端在一个网段内或者都连接到了公网上,那么可以通过服务器进行握手后,分别得到对方客户端的信息,如IP后,就可以相互连接通信。之后,就与服务器无关了。
第二种就是如果两个客户端不在个网段内,也就是说外面的计算机访问本机不可达,这两个客户机都是通过网关(路由器等)进行连网,那就需要能网穿透技术,把两台客户机打通之后,就可以连接了。连接之后,与服务器没关系了。qq就是这样的,这过程需要服务器做为第三者进行中介。详细请参考NAPT
像你说的那样,对于数据小还可以,要是像qq这个级别,服务器受不的,而且如果还要视频的话,更加糟糕。服务器会死掉的。
回复 使用道具 举报
1、通过服务器来转发,是cs模式,
2、通过两个客户端直接通信的,是点对点模式。
3、这两种都可以做到。如果采用cs,则客户端A要把发送给客户端B的消息封装,
在消息中加入B的ip地址和端口号。 然后,在服务端通过截取字符串,解析出ip地址和端口号。
4、无论采用哪种方式,要在服务器注册,因为一关机,可能你的ip地址就改变了。

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马