套节字网络问题

[复制链接]
查看11 | 回复8 | 2011-10-31 12:33:30 | 显示全部楼层 |阅读模式
怎么能在两台电脑在不知道IP的情况下,使两个软件(一个建服务器,一个客户端)通讯起来,或者怎么实现某一方能扫描到服务器或客户端的IP再连接起来,用SOCKET应该怎么写呢?不要说一定要中转服务器,我看到某模拟器联机的点对点(好象是P2P)功能,就是不用中转也能找到对方IP再连接起来的,请教各位高手了
回复

使用道具 举报

千问 | 2011-10-31 12:33:30 | 显示全部楼层
应该可以使用组播来解决。1.服务端运行后加入组播组(比如234.5.6.7),端口号指定一个(考虑客户端是否有必要加入组播组?)。2.客户端发送想组内发送组播信息询问是否有服务器正在网内运行。3.服务器收到请求后将自身IP地址和监听端口发送会客户端。4.客户端现在应该可以和服务端进行通信了。追问怎么加入组播组,比如用哪个函数?
回复

使用道具 举报

千问 | 2011-10-31 12:33:30 | 显示全部楼层
这个应该参考网络编程的书籍,我记得应该是setsockopt函数。或者你可以在网上找一段组播的代码。
回复

使用道具 举报

千问 | 2011-10-31 12:33:30 | 显示全部楼层
我在局域网试过了,是就是可以在不知道IP的情况下即时通讯.但是到了一台外网,一台内网就不行了~能不能解决这个问题呢?
回复

使用道具 举报

千问 | 2011-10-31 12:33:30 | 显示全部楼层
组播是可以被路由的,可以从这几个方面入手1.查看是否有些组播地址的消息不能被路由器转发。2.查看你内网到外网的路由器是否支持组播路由。这两个问题都是肯定的话,那应该没有问题了。
回复

使用道具 举报

千问 | 2011-10-31 12:33:30 | 显示全部楼层
内网可以用广播外网没试过赞同
回复

使用道具 举报

千问 | 2011-10-31 12:33:30 | 显示全部楼层
网络上通信除了广播这种通信方式之外。其他的任何通信,都需要端口和ip。也就是说你必须能扫描到服务器端的ip和端口号,只有监听某一个端口的tcp才能被扫描到,udp扫描到的成功率很低。假设你用tcp通信,现在知道服务开启的端口号,你进行全网扫描,或者某一个子网扫描。扫描到具体的ip之后,进行connect.就可以。当然如果你用tcp通信,不知道服务开启的端口号,那你就麻烦了。需要对每一个ip上的所有端口号进行扫描,扫描就是用tcpconnect.没别的办法。如果你用udp通信,扫描理论上可行(根据接收的icmp包进行判断),但是由于网络防火墙的的配置,一般你扫描不到。记住只能是client扫描sever的ip和端口号,client本身不监听端口,没办法被扫描到。追问怎么写发送广播封包,让外网的电脑接收到?还有,软件自己写的端口肯定知道,知道端口怎么扫描到监听的服务器IP呢?如果监听的服务器IP是192.168.x.x之类的,又怎么连接得到呢
回复

使用道具 举报

千问 | 2011-10-31 12:33:30 | 显示全部楼层
建议LZ复习下网络基础知识赞同
回复

使用道具 举报

千问 | 2011-10-31 12:33:30 | 显示全部楼层
去研究p2p协议吧,看看这些是如何实现的。貌似这是个很大的问题,百度一下一个p2p技术就是一本书,而真正这方面的资料几乎没有赞同
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行