关于网络编程的几个问题

问题描述

在内网下QQ等为什么不用映射就可以通信?我看到有说只有外网IP才能通信的,应该是只能路由到外网吧?可是如果这样的话那那些c/s的软件在路由器组成的局域网再连接外网的情况下就别想用了啊,还要映射。可是我们用的这种软件却不用映射,用映射的只有灰鸽子那种远程控制木马,灰鸽子有什么不同?我看到有资料说灰鸽子是反向连接的,谁能具体给我说下?服务器端连接客户端?怎么连接?服务器端应该是监听一个端口接收连接的啊。服务器端的控制端是客户端,被控端是服务端,上线原理是通过类似DNS的东西获取控制端的IP,通过动态域名或者ftp。可是服务端是如何连接客户端的呢?

解决方案

解决方案二:
QQ的连接过程应该是你登录QQ的时候连接QQ服务器,同时告知了QQ服务器你的IP,状态等等,然后会取得各好友的状态(在线与否),更新等。同理,如果好友在线的话就可以得到他的IP地址的。之后你如果想发送给一个在线好友信息的时候是直接连接好友而不通过QQ的服务器。如果你在线的时候另一位好友由不在线状态变成在线状态,这时候我想应该是QQ服务器推送给你的。所以如果你们在同一个局域网的话,应该不会路由到公网上去的。只有给不在线的好友发送信息的时候,才发送到QQ服务器并给你缓存起来,等到他上线的时候通知他。不过也有个类似最多保留多少条信息的限制。网络连接都是直接用IP地址+端口连接,区分的。服务器端确实在监听特定的端口。QQ应该是同时具有客户端和服务器端的功能的。
解决方案三:
登录时先发IP到服务器,好友IP也是从服务器取得的,所以你不用关心IP的映射
解决方案四:
QQ等登陆时就相当于给服务器发送了一个获取所有好友信息(包括好友IP)的指令,服务器根据你的IP和好友列表返回就是了。
解决方案五:
你上qq的时候就把你的路由ip等信息发过去了服务往回发就可以联系你了啊
解决方案六:
该回复于2011-02-22 08:46:22被版主删除
解决方案七:
该回复于2011-04-16 10:19:27被版主删除
解决方案八:
几乎不结帖之人!
解决方案九:
发送给一个在线好友信息的时候是直接连接好友而不通过QQ的服务器。原来是这样。那我和同学在局域网上传文件,速度达到有时10m。就是这个原因

时间: 2024-12-23 19:37:52

关于网络编程的几个问题的相关文章

python网络编程之数据传输UDP实例分析

  本文实例讲述了python网络编程之数据传输UDP实现方法.分享给大家供大家参考.具体分析如下: 一.问题: 你觉得网络上像msn,qq之类的工具在多台机器之间互相传输数据神秘吗?你也想玩一下在两台机器之间传数据吗?今天让python告诉我们基本原理吧,当然只是做简单的了解,实际情况复杂的多. 我们今天用python实现一个简单的udp程序. 二.程序实现: 1) 使用模块 (socket)套接字模块: 套接字模块是一个非常简单的基于对象的接口,它提供对低层BSD套接字样式网络的访问 .使用

python网络编程之文件下载实例分析

  本文实例讲述了python网络编程之文件下载实现方法.分享给大家供大家参考.具体如下: 真是越看越喜欢python啊,想要了解它提供的http和ftp下载功能,原来是如此的简单. 1.相应模块 ftplib模块定义了FTP类和一些方法,用以进行客户端的ftp编程.我们可用python编写一个自已的ftp客户端程序,用于下载文件或镜像站点.如果想了解ftp协议的详细内容,请参考RFC959或是查看python帮助吧. Urllib模块提供了非常高级的接口来从网络上抓取数据,主要使用到的是url

网络编程Socket

 网络模型 OSI参考模型 TCP/IP参考模型 可以上网脑补 学的网络编程主要在应用层(我想android.JavaWeb.QQ.梦幻西游等吧,估计是).传输层和网际层混,每个层都有自己的协议规则. 传输层主要用TCP(同步:面向连接,数据量大).UDP(异步:面向无连接,大小限制在64k内,QQ聊天.网络视频用的UDP) 网际层主要用IP协议 应用层协议:HTTP 网络通讯要素 IP地址:标识网络上的电脑的,相当于给电脑取个唯一的名字   192.168.1.1,最大只能设置255这是字

Java IO和网络编程的一些问题

1.网络编程时的同步.异步.阻塞.非阻塞? 同步:函数调用在没得到结果之前,没有调用结果,不返回任何结果.异步:函数调用在没得到结果之前,没有调用结果,返回状态信息.阻塞:函数调用在没得到结果之前,当前线程挂起.得到结果后才返回.非阻塞:函数调用在没得到结果之前,当前线程不会挂起,立即返回结果. 2.Java如何实现无阻塞方式的Socket编程? NIO有效解决了多线程服务器存在的线程开销问题. 在NIO中使用多线程主要目的不是为了应对每个客户端请求而分配独立的服务线程, 而是通过多线程充分利用

Java编程那些事儿101——网络编程概述

第十三章 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在学习网络编程以前,很多初学者可能觉得网络编程是比较复杂的系统工程,需要了解很多和网络相关的基础知识,其实这些都不是很必需的.首先来问一个问题:你会打手机吗?很多人可能说肯定会啊,不就是按按电话号码,拨打电话嘛,很简单的事情啊!其实初学者如果入门网络编程的话也可以做到这么简单! 网络编程就是在两个或两个以上的设备(例如计算机)之间传输

iOS开发网络篇—网络编程基础(二)

下面叙述的是关于几个必须要知道的iOS网络编程入门级别的要点: 1.客户端如何找到连接的服务器 客户端通过URL找到想要连接的服务器 2.什么是URL URL的全称是Uniform Resource Locator(统一资源定位符) 通过1个URL,能找到互联网上唯一的1个资源 URL就是资源的地址.位置,互联网上的每个资源都有一个唯一的URL URL的基本格式 = 协议://主机地址/路径 http://www.520it.com/img/logo.png 协议:不同的协议,代表着不同的资源查

网络编程的一些简单总结

网络编程是一个很大也很有趣的话题,要写好一个高性能并且bug少的服务端或者客户端程序还是挺不容易的,而且往往涉及到进程线程管理/内存管理/VFS/协议栈等许多相关的知识,尤其是并发.所以不仅仅只是会使用socket那么简单. 网络编程模型 几个相关概念: 阻塞/非阻塞 阻塞和非阻塞通常是指文件描述符本身的属性,拿socket来说,当socket读缓冲区中没有数据时或者写缓冲区满时,都会造成我们read/recv或者write/send系统调用阻塞.而非阻塞socket在这种情况下会产生EWOUL

Python中利用原始套接字进行网络编程的示例

  这篇文章主要介绍了Python中利用原始套接字进行网络编程的示例,使用sock_raw接受和发送数据包可以避开网络协议的诸多限制,需要的朋友可以参考下 在实验中需要自己构造单独的HTTP数据报文,而使用SOCK_STREAM进行发送数据包,需要进行完整的TCP交互. 因此想使用原始套接字进行编程,直接构造数据包,并在IP层进行发送,即采用SOCK_RAW进行数据发送. 使用SOCK_RAW的优势是,可以对数据包进行完整的修改,可以处理IP层上的所有数据包,对各字段进行修改,而不受UDP和TC

J2ME网络编程以及网络游戏的实现

编程|网络 引言 J2ME(Java 2 Micro Edition)是Java 2的一个组成部分,是一种高度优化的Java运行环境,主要针对消费类电子设备的,例如蜂窝电话.可视电话.数字机顶盒和汽车导航系统等等.即J2ME是为消费电子产品和手持设备量身定制的Java专用版本. J2ME的出现使开发跨平台的消费类电子产品的应用软件成为可能.Java语言的与平台无关的特性移植到小型电子设备上,允许移动无线设备之间共享应用程序.它提供了基于HTTP的高级Internet协议,使移动电话能以Clien

多线程在Visual C#网络编程中的应用

visual|编程|多线程|网络 网络应用程序的一般都会或多或少的使用到线程,甚至可以说,一个功能稍微强大的网络应用程序总会在其中开出或多或少的线程,如果应用程序中开出的线程数目大于二个,那么就可以把这个程序称之为多线程应用程序.那么为什么在网络应用程序总会和线程交缠在一起呢?这是因为网络应用程序在执行的时候,会遇到很多意想不到的问题,其中最常见的是网络阻塞和网络等待等. 程序在处理这些问题的时候往往需要花费很多的时间,如果不使用线程则程序在执行时的就会表现出如运行速度慢,执行时间长,容易出现错