Socket实现跨外网通信的问题

HUABAOREN 2013-10-23 10:03:06
我用 孙鑫的socket知识,做了一个 C/S 的聊天软件。在实验室的无线网里【即局域网】测试可以正常通信。后来,用QQ把客户端发给我一个 外地的同学,测试 聊天软件的性能。但是,问题出现了。我的局域网Ip地址是192.168.1.101.我同学的局域网IP也是192.168.1.101.这就导致没法通信。后来,我把我的局域网IP设为192.168.1.102了,还是没法通信。
后来,才知道我们的IP地址都仅限于 局域网。没有牵涉到外网。【最主要的是不知道 外网IP往哪里填写,貌似Socket只有一个IP项可填写。】
我现在很疑惑,莫非 SOcket只能识别局域网IP。那样的话,Socket网络通信的意义不就大大折扣了么。。。

如何实现,Socket跨外网,与外地同学之间进行通信
...全文
11285 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
HUABAOREN 2016-07-11
  • 打赏
  • 举报
回复
QQ通信都是有中间server作为调度中心,然后通信其实斗鱼server这个公网ip进行通信
kakabulusi 2016-07-11
  • 打赏
  • 举报
回复
这种方式的话,需要做内网到公网的端口映射, 你的基础知识略差,先掌握网络基础知识再来做socket编程吧。。 如果做内网穿透的话,必须使用TCP协议(基于UDP无法穿透内网) 而且服务器端必须将端口放到公网。 内网穿透的形象解释:我们可以上传文件到QQ服务器上临时保存,我们也可以提交下载申请到qq服务器上进行文件下载(提交申请 ,文件传递 这就是穿透)。 如果我们不安装QQ,腾讯的服务器无法将文件直接传递到我们的个人主机上的(我们不提交下载申请 ,随他多大的本事,他是不能穿透的)。
Moujiker 2013-11-20
  • 打赏
  • 举报
回复
像楼上说的那样的话,那QQ是如何进行通信的呢?
wxliangzyt 2013-11-11
  • 打赏
  • 举报
回复
计算机基础这个你没学吧!
「已注销」 2013-11-11
  • 打赏
  • 举报
回复
你们俩通了VPN就直接能通信了。
springontime 2013-11-05
  • 打赏
  • 举报
回复
这个绝笔大学没好好听课,拿一个192这样的保留地址就想和具备合法地址的internet上的地址通信
wushuang443 2013-10-28
  • 打赏
  • 举报
回复
学习了。该问题其实我也好想知道。。。
夫人的泡泡鱼 2013-10-28
  • 打赏
  • 举报
回复
推荐使用花生壳www.oray.com
旅客 2013-10-28
  • 打赏
  • 举报
回复
各位大神,新手学windows网络编程,看什么书比较好啊,求指教
mlqxj35674 2013-10-28
  • 打赏
  • 举报
回复
我只能说,你呀!真可爱
rsdtt 2013-10-25
  • 打赏
  • 举报
回复
这个。。。入门的路还很长。。。楼主加油
版主大哥 2013-10-25
  • 打赏
  • 举报
回复
呵呵,计算机基础这个你没学吧!还是开过这个课,你没认真听
tanyufeng_521 2013-10-25
  • 打赏
  • 举报
回复
引用 8 楼 HUABAOREN 的回复:
[quote=引用 5 楼 tanyufeng_521 的回复:] 这中间的知识比较多,你要走的路还长
你的意思是,还需要专门学习【计算机网络】【TCP/IP详解】等方面的的专业知识么,不能单纯的靠 孙鑫的教程,就能掌握socket通信技术么[/quote] 是的,孙鑫的那套视频所讲到的网络编程只是起到抛砖引玉的作用,就像里面讲到数据库编程一样的。要真正做网络编程、数据库编程等还需要学习相关的知识。
xiaohuh421 2013-10-24
  • 打赏
  • 举报
回复
是的, 只要知道你电脑的外网IP就可以直接像局域网一样通信, 但是有个前提, 你的电脑是独立IP, 如果是在路由器后面的, 那就需要断口映射. 当然还有其它复杂些的技术,不需要作断口映射, 比如P2P技术.
引用 3 楼 HUABAOREN 的回复:
[quote=引用 2 楼 xiaohuh421 的回复:] 知道外网IP与端口即可, IP38上可以看到外网IP, 但是如果你是路由器上网, 那么需要作端口映射.
你的意思,如果电脑显示的IP地址是外网地址,而不是192.168.*.*的局域网,那样的话,就直接把外网IP作为目标IP地址,就可以么[/quote]
HUABAOREN 2013-10-24
  • 打赏
  • 举报
回复
引用 6 楼 gz_qmc 的回复:
socket编程就只实现了固定地址网的通讯,你家宽带是动态地址,所以宽带之外没有意义 至于,把外网终端作为局域网的一个站点,是另外一个话题,叫虚拟网络. 关于把世界上某一台联在互联网上电脑和你家电脑用socket实现通讯 需要用到虚拟网络中的技术,叫P2P,中文名叫点对点 你的程序没有错,是中国人口太多了,固定IP地址不够分
谢谢你的解释,我知道了自己还是欠缺 网络知识,需要额外补充【虚拟网络技术】【 P2P技术】
HUABAOREN 2013-10-24
  • 打赏
  • 举报
回复
引用 5 楼 tanyufeng_521 的回复:
这中间的知识比较多,你要走的路还长
你的意思是,还需要专门学习【计算机网络】【TCP/IP详解】等方面的的专业知识么,不能单纯的靠 孙鑫的教程,就能掌握socket通信技术么
HUABAOREN 2013-10-24
  • 打赏
  • 举报
回复
引用 4 楼 xiaohuh421 的回复:
是的, 只要知道你电脑的外网IP就可以直接像局域网一样通信, 但是有个前提, 你的电脑是独立IP, 如果是在路由器后面的, 那就需要断口映射. 当然还有其它复杂些的技术,不需要作断口映射, 比如P2P技术. [quote=引用 3 楼 HUABAOREN 的回复:] [quote=引用 2 楼 xiaohuh421 的回复:] 知道外网IP与端口即可, IP38上可以看到外网IP, 但是如果你是路由器上网, 那么需要作端口映射.
你的意思,如果电脑显示的IP地址是外网地址,而不是192.168.*.*的局域网,那样的话,就直接把外网IP作为目标IP地址,就可以么[/quote] [/quote] 非常感谢,略懂一些Socket通信的知识了
gz_qmc 2013-10-24
  • 打赏
  • 举报
回复
socket编程就只实现了固定地址网的通讯,你家宽带是动态地址,所以宽带之外没有意义 至于,把外网终端作为局域网的一个站点,是另外一个话题,叫虚拟网络. 关于把世界上某一台联在互联网上电脑和你家电脑用socket实现通讯 需要用到虚拟网络中的技术,叫P2P,中文名叫点对点 你的程序没有错,是中国人口太多了,固定IP地址不够分
tanyufeng_521 2013-10-24
  • 打赏
  • 举报
回复
这中间的知识比较多,你要走的路还长
许文君 2013-10-23
  • 打赏
  • 举报
回复
首先,你要先了解私有IP与公有IP之间的区别。 其次关于NAT推荐你先看篇文章。 http://hwycheng.bokee.com/2404843.html
加载更多回复(2)
千里马8年Android系统及应用开发经验,曾担任过美国unokiwi公司移动端技术总监兼架构师,对系统开发,性能优化,应用高级开发有深入的研究,Android开源定制ROM Lineage的贡献者之一,国内首家线下开辟培训Android Framework课程,拥有2年的Android系统培训经验。成为腾讯课堂专业负责android framework课程分享第一人,致力于提高国内android Framework水平Android Framework领域内是国内各大手机终端科技公司需要的人才,应用开发者都对Android系统充满着好奇,其中的binder是重中之重,都说无binder无Android,binde是Android系统的任督二脉。课程水平循序渐进,由中级再到高级,满足各个层次水平的android开发者。1、灵活使用binder进程通信,在app端对它的任何api方法等使用自如2、可以单独分析android系统源码中任何binder部分,分析再也没有难度3、掌握binder驱动本质原理,及对应binder驱动怎么进行进程通信,及内存等拷贝方式数据等4、对binder从上层的java app端一直到最底层的内核binder驱动,都可以顺利理通5、针对系统开发过程中遇到的binder报错等分析方法,及binder bug案例学习6、针对面试官任何的binder问题都可以对答自如7、socket这种进程通信实战使用8、针对android源码中使用的socket源码轻松掌握9、android系统源码中最常见的socketpair中双向进程通信10、使用socket实现一个可以让app执行shell命令的程序

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧