c#实现的P2P网络通讯程序

在网上看了很多程序(QQ、Azureus、Ants、PPStream)都实现了p2p,以前觉得技术很高深。通过这 段时间的学习才发现,单纯的实现p2p在局域网通讯很容易,但是要实现外网穿透(NAT)感觉很困难。最近 看了Azureus和emule源码,分别是JAVA和C++版,本人对这两门语言都不熟悉,看起来很吃力。最后只好 根据VC++实现的P2PDemo程序进行了改版,根据设计思路用c#写了一个Demo出来。通过测试,多个客户端 在局域网能脱离服务端实现端到端工作。外网的情况要通过路由器,看了Azureus要实现uPnp进行端口映 射,在CodeProject上下载了一个uPnp源码看,测试结果没有启用uPnp路由器。结果现在郁闷了,不知道 下一步怎么测试,是不是用upnp实现了端口自动映射成功就能实现象QQ那样通讯。

下面是程序说明:

1、公共类

公共类主要定义一些包结构

a、Packet.cs

[Serializable()]
    public abstract class Packet
    {
        /// <summary>
        /// 命令类型
        /// </summary>
        /// <returns></returns>
        public virtual int GetCommandType()
        {
            return -1;
        }

        /// <summary>
        /// 用户名
        /// </summary>
        public string UserName
        {
            get;
            set;
        }

        public Packet()
        { }

        public Packet(string username)
        {
            this.UserName = username;
        }
    }

时间: 2024-08-03 18:27:51

c#实现的P2P网络通讯程序的相关文章

CB中用socket api写网络通讯程序

在7月4日看完sockcomp.pas后,我决定用socket api来写一个客户端和服务器并且同时支持TCP,UDP协议,于是我就去做,现将代码贴出来(已调试通过) Socket api Client:#ifndef UDPClientH#define UDPClientH#include <Classes.hpp>#include <Controls.hpp>#include <StdCtrls.hpp>#include <Forms.hpp>#incl

ACE中网络通讯编程基本架构

ACE_INET_Addr类,包装了网络地址 ACE_SOCK_Connector类,扮演主动连接角色,发起通讯连接.连接到远端的服务. ACE_SOCK_Acceptor类,扮演被动连接角色,等待连接.等待远端客户的请求. ACE_SOCK_Stream类,扮演数据通讯角色,发送和接收数据.完成客户与服务之间的通讯. 利用ACE库来开发网络通讯程序是很简单的,一个基本程序只用到以上提到的几个类,就可以完成一个基于客户端.服务器端模型的网络应用的开发.开发者无需了解Socket在不同平台上的实现

用C#实现基于TCP协议的网络通讯

网络 TCP协议是一个基本的网络协议,基本上所有的网络服务都是基于TCP协议的,如HTTP,FTP等等,所以要了解网络编程就必须了解基于TCP协议的编程.然而TCP协议是一个庞杂的体系,要彻底的弄清楚它的实现不是一天两天的功夫,所幸的是在.net framework环境下,我们不必要去追究TCP协议底层的实现,一样可以很方便的编写出基于TCP协议进行网络通讯的程序. 要进行基于TCP协议的网络通讯,首先必须建立同远程主机的连接,连接地址通常包括两部分--主机名和端口,如www.yesky.c

用C#实现基于用C#实现基于TCP协议的网络通讯

网络 TCP协议是一个基本的网络协议,基本上所有的网络服务都是基于TCP协议的,如HTTP,FTP等等,所以要了解网络编程就必须了解基于TCP协议的编程.然而TCP协议是一个庞杂的体系,要彻底的弄清楚它的实现不是一天两天的功夫,所幸的是在.net framework环境下,我们不必要去追究TCP协议底层的实现,一样可以很方便的编写出基于TCP协议进行网络通讯的程序. 要进行基于TCP协议的网络通讯,首先必须建立同远程主机的连接,连接地址通常包括两部分--主机名和端口,如www.yesky.c

Python Socket通讯程序例子

python中内置的socket模块使得网络编程更加简单化,下面就通过两个小小脚本来了解客户端如何与服务器端建立socket. 客户端代码: #clietn.py if __name__ == '__main__':  #判断是否调用自己本身,如果不是则__name__为脚本名称 import socket  #导入我们所需的socket模块sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  #第一步是创建socket对象.调用so

p2-有没有学习用C++来做P2P网络编程的网址

问题描述 有没有学习用C++来做P2P网络编程的网址 最近毕业设计要做p2p网络编程,想找个地方学习下,指导老师说可以做个类似迅雷的软件, 不过我都不清楚什么是P2P网络编程. 解决方案 google搜索emule source code,emule是一个C++实现的典型的p2p文件分享程序,并且开放源代码. 解决方案二: 这个可以购买学习资料之类的 解决方案三: 去下载电骡或BitCommet的源码,这些应该都是开源的. 解决方案四: 看书:开发案例" rel="nofollow&q

Android三种网络通讯方式及Android的网络通讯机制_Android

Android平台有三种网络接口可以使用,他们分别是:java.net.*(标准Java接口).Org.apache接口和Android.net.*(Android网络接口).下面分别介绍这些接口的功能和作用. 1.标准Java接口 java.net.*提供与联网有关的类,包括流.数据包套接字(socket).Internet协议.常见Http处理等.比如:创建URL,以及URLConnection/HttpURLConnection对象.设置链接参数.链接到服务器.向服务器写数据.从服务器读取

Forban 0.0.32发布 P2P文件共享应用程序

Forban 是一个支持本地链路和局域网的P2Phttp://www.aliyun.com/zixun/aggregation/18450.html">文件共享应用程序.它能够从互联网上独立运行,使用本地网络进行通知.发现.搜索或共享文件.Forban 依赖于HTTP,能够复制任何文件,简约的Forban协议可以实现其它产品. Forban 0.0.32该版本增加了一个额外的因素参数重建索引,且限制重建索引所需的资源.更好地支持OPENWRT(PirateBox)和类似的低端系统,已列入多

P2P网络贷款危机:哈哈贷夭折10万用户善后

P2P贷款模式分为线上和线下,拍拍贷作为线上的代表,宜信作为线下的代表 7月20日,在2011年第三次经济金融形势通报分析会上,银监会主席刘明康表示要密切关注二三线城市房地产市场风险,要高度警惕网络借贷.民间借贷和小额贷款公司等领域凸显的风险,筑牢防火墙. 然而就在分析会的第二天,一家自称为中国最严谨的网络互借平台的哈哈贷网便发布了宣布关闭的通告. 每每在关键时刻总会有出人意料的事情发生,或许只是一个小插曲,却还是会让我们反思:哈哈贷的关闭会不会是P2P网络贷款发展中所经历的必然性的安排,P2P