我用Winsock编了两个通信程序,一个是基于TCP,另一个是基于UDP。我的PC机是在校园里一栋实验楼的一个实验室里局域网里的机子,通过路由器连接,IP是192.168.0.XXX,出去的IP是202.114.XX.XXX.在本实验室内的局域网内通信成功。我想问的问题是:我想和局域网外部的另一台机子连接上,什么情况下是可行的?例如另一台机子是另一个实验室的,或者是另一个学校的,又或者是家庭里一台用ADSL虚拟拨号上网的机子。

解决方案 »

  1.   

    这种情况如果采用udp就涉及到net转换。如果是tcp的话就需要有一个有固定ip的服务器。然后2个客户端进行消息的转发2种协议的关键是一个有固定ip的服务器或者域名运行一段服务器程序,进行
    net 转换
    或者消息转发
      

  2.   

    我对网络不是很清楚,按你说的我是这样理解的:两台PC机之间通信必须要经过一个服务器,通过它来中转消息,在同一个局域网中两台机子都是和这个服务器连在一起的,那么就可以互发消息。如果一个局域网内部PC要和另一个局域网内部的PC通讯是不可能的,像我们一栋实验室可能有一个总的服务器,每个实验室分配了一到两个IP,两个实验室直接使用这个分配的IP的机子(不是再通过路由分配IP)可以通过实验楼的总服务器转发消息而通讯上。
    如果像我这样局域网内部的PC除非是和另一个学校的一台具有固定IP的服务器通讯,否则也无法连通。如果是对拨号上网的用户,IP更是随机分配的,就更不可能连上了。是吗?
      

  3.   

    天那!!楼主的现在的状况和我太一样了!!!
    我现在是做了个TCP的,也是教学楼内实验室的网,我们实验室的连上了,可以互发信息,但是我想和外网连上,比如和我以前的同学,我不知道该怎么办。而且我不知道我在外面显示IP,用查IP的查居然显示我自己设的IP,楼主知道怎么回事吗?如果你的东西做好了别忘了给我一份哦
      

  4.   

    建议楼主去找一个P2P编程的东西
    还有,如果要想在一个或是多个网关之间建立连接,除了P2P之后唯一可行的办法就是网关转发比如有你在的局域网的网关IP为192.168.0.1,而外网标志IP为202.200.200.200
    另一个局域网的外网标志IP为202.200.200.201
    那么,当你要向另一个局域网建立连接的时候流程大致是这个样子的(如果有网关转发规则)
    本机发请求到网关----->网关记录你的IP并通过外网发请求到对方局域网网关---->对方网关记录来源IP(你的网关的外网IP)并发消息到局域网内的机器-------->目标机器收到消息且同意连接,发消息给风关------->网关记录IP与信息关通过记录的网关外网IP(你的网关的)发送返回消息------->你的网关通过记录的局域网IP发消息给你但是这存在通讯问题,也就是说,网关不允许外网访问本局域网内的机器(实际情况)
    本机发请求到网关----->网关记录你的IP并通过外网发请示到对方局域网网关---->对方网关不允许外网机器访问局域网内机器(请求被拒绝)办法一,通过服务器转发,设置转发规则,如所有访问本局域网网关TCP某端口的请示全部连接到局域网内某机器的TCP端口上
    办法二,P2P技术,点对点的,网上比较多,很容易实现
      

  5.   

    如果你想连接的机器不在网关内,是可以建立连接的
    比如你现在用的telnet、http服务都是基于tcp的,而你在实验室是可以上bbs、浏览网页的
    虽然其它的端口我没有试验过,但我想这是没问题的,所以udp协议也应该是没问题的
    但前提是对方不再网关内如果要连接的机器在网关内,如果不通过第三方机器,我想是没法建立连接机器的
    主要原因是你不知道该如何连接对方机器,不是么?
    假设你知道对方网关的ip(200.200.200.200),也知道它在局域网的ip(192.168.0.3)
    但你知道该如何告诉它的网关,让它知道你想连接的计算机就是它的局域网内的192.168.0.3么?
    你发了一个数据包给它,它打开一看,这都是什么破玩意,垃圾。就给扔了
    反过来同理它也没办法连接你
    除非你知道对方网关是对局域网内的数据做如何加工的
    所以这个时候就应该有一个非网关内的机器做一次数据格式的识别,可以叫他server
    当双方都想连接的时候,就都发送一个数据包给这个server
    server再把对方的数据包发送给你,也把你得给对方
    你接收之后,可以分析到对方的网关是怎么加工对方发出来的数据
    这样你再发送数据的时候,就发送同样格式的数据给对方的网关
    对方的网关分析你发送的数据之后,就可以把数据分配给你想要到达的机器了以上是我的猜想,有机会我也会试验,做一个类似qq的软件
      

  6.   

    给你一个链接
    有机会读一下吧http://blog.vckbase.com/leoyin/articles/265.aspx
      

  7.   

    看来我说得太浅显了再给你一个链接吧:
    http://www.ppcn.net/n1306c2.aspx