C#语言由于其对网络功能良好的支持,特别是内置地支持TCPListener和TCPClient这二个类,使得利用它开发P2P应用程序变得非常容易。下面就是一个使用C#开发的P2P应用的例子:

public MyTcpListener(int port) : base(port)

public void StopMe()
{
if ( this.Server != null )

}
}

public class Transfer
{
MyTcpListener tcpl;

public Transfer()
{
OptionsLoader ol = new OptionsLoader();
int port = 8081;
if (ol.Port > 0)
{
port = ol.Port;
}
else
{
port = 8081;
}

this.tcpl = new MyTcpListener(port);
}

public void TransferShutdown()

public void ListenForPeers()
{
try
{

Encoding ASCII = Encoding.ASCII;

tcpl.Start();

while (true)
{
// 在有连接之前,Accept将处于阻塞状态
Socket s = tcpl.AcceptSocket();
NetworkStream DataStream = new NetworkStream(s);

String filename;
Byte[] Buffer = new Byte[256];
DataStream.Read(Buffer, 0, 256);
filename = Encoding.ASCII.GetString(Buffer);
StringBuilder sbFileName = new StringBuilder(filename);
StringBuilder sbFileName2 = sbFileName.Replace("", "");
FileStream fs = new FileStream(sbFileName2.ToString(), FileMode.Open, FileAccess.Read);
BinaryReader reader = new BinaryReader(fs);
byte[] bytes = new byte[1024];
int read;
while((read = reader.Read(bytes, 0, bytes.Length)) != 0)
{
DataStream.Write(bytes, 0, read);
}
reader.Close();
DataStream.Flush();
DataStream.Close();
}
}
catch(SocketException ex)
{
MessageBox.Show(ex.ToString());
}
}

public void DownloadToClient(String server, string remotefilename, string localfilename)
{
try
{
TcpClient tcpc = new TcpClient();
Byte[] read = new Byte[1024];

OptionsLoader ol = new OptionsLoader();
int port = 0;
if (ol.Port > 0)
{
port = ol.Port;
}
else
{
// 缺省的端口号,可以设置为使用的端口号
port = 8081;
}

// 尝试与服务器连接
IPHostEntry IPHost = Dns.Resolve(server);
string []aliases = IPHost.Aliases;
IPAddress[] addr = IPHost.AddressList;

IPEndPoint ep = new IPEndPoint(addr[0], port);
tcpc.Connect(ep);

// 获得流对象
Stream s = tcpc.GetStream();
Byte[] b = Encoding.ASCII.GetBytes(remotefilename.ToCharArray());
s.Write( b, 0, b.Length );
int bytes;
FileStream fs = new FileStream(localfilename, FileMode.OpenOrCreate);
BinaryWriter w = new BinaryWriter(fs);

// 读取流对象,并将其转换为ASCII码
while( (bytes = s.Read(read, 0, read.Length)) != 0)
{
w.Write(read, 0, bytes);
read = new Byte[1024];
}

tcpc.Close();
w.Close();
fs.Close();
}
catch(Exception ex)
{
throw new Exception(ex.ToString());
}
}
}
}

转载于:https://www.cnblogs.com/StarYe/archive/2009/08/10/1543006.html

使用C#开发一个简单的P2P应用相关推荐

  1. 利用WCF的callback机制开发一个简单的多人游戏模型

    本文介绍了如何利用WCF和callback机制开发一个简单的多人在线游戏模型. 运行过程如下: 当game service 启动之后,若干个客户端便会自动连接到服务器.当某个客户端点击join gam ...

  2. [译]使用 Rust 开发一个简单的 Web 应用,第 4 部分 —— CLI 选项解析

    原文地址:A Simple Web App in Rust, Part 4 -- CLI Option Parsing 原文作者:Joel's Journal 译文出自:掘金翻译计划 本文永久链接:g ...

  3. php开发mvc教程,php开发一个简单的MVC

    本文通过实例为大家介绍用php开发一个简单mvc的方法,起到势砖引玉的作用,本文比较适合刚接触mvc的朋友. MVC其实就是三个Model,Contraller,View单词的简称. Model,主要 ...

  4. Nginx开发一个简单的HTTP过滤模块

    本文将学些开发一个简单的HTTP过滤模块,它能够对Content-Type为text/plain的包体前加上前缀字符串prefix. <一> 过滤模块的调用顺序 过滤模块可以叠加,也就是说 ...

  5. python可视化界面编程 pycharm_pycharm开发一个简单界面和通用mvc模板(操作方法图解)...

    文章首先使用pycharm的 PyQt5 Designer 做一个简单的界面,然后引入所谓的"mvc框架". 一.设计登录界面 下面开始第一个话题,使用pycharm的 PyQt5 ...

  6. 开发一个简单的WebPart

    开发一个简单的WebPart,首先我们需要对Visual Studio .NET 2003进行相应功能的扩展,我们可以在微软的网站下载到一个扩展功能包,名字叫:WebPartTemplatesforV ...

  7. java计算机毕业设计vue开发一个简单音乐播放器(附源码、数据库)

    java计算机毕业设计vue开发一个简单音乐播放器(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Ec ...

  8. java开发一个简单的通讯录

    java开发一个简单的通讯录 ArrayList的综合应用 import java.util.*; public class ContactNote{static Scanner sc=new Sca ...

  9. 开发一个简单易用的SDK的详细步骤(超详细,超适用)

    文章目录 开发一个简单易用的SDK的详细步骤 创建starter步骤 关键点 总结 开发一个简单易用的SDK的详细步骤 创建starter步骤 1.新建一个 spring boot 初始化项目 2.添 ...

最新文章

  1. Oracle大数据量分页通用存储过程
  2. 解析 Java 类和对象的初始化过程 由一个单态模式引出的问题谈起
  3. java中qq中拉伸的文件,delphi中如何实现QQ中的截图并实现拉伸放大移动的功能
  4. AngularJS.js: temple
  5. 什么镜头最适合拍风景_哪种镜头最适合你的街头摄影?
  6. STM32F103单片机输出相位可调PWM波
  7. DeepFM: A Factorization-Machine based Neural Network for CTR Prediction
  8. win10游戏版如何安装 Windows10安装游戏版的步骤方法
  9. 遇到一个不得其解的问题。
  10. Demo 示例:如何原生的在 K8s 上运行 Flink?
  11. maya为什么不能导出fbx_maya从 Maya 导出为 FBX 文件,MAYA
  12. iOS 10 通知 --UserNotifications
  13. 《超越宝典汽配汽修管理系统——“美容管理”模块》项目研发阶段性总结
  14. UESTC 男神的礼物
  15. 下载腾讯视频为mp4格式
  16. 近年来计算机的就业情况图表,计算机学院召开2009级学生考研动员大会
  17. 经典CNN结构论文阅读:AlexNet
  18. python有哪些模块安全方向_Python 常用模块
  19. CentOS7配置阿里云yum源和EPEL源
  20. 2014 ACM亚洲区域赛 - 北京现场赛

热门文章

  1. 《TCP/IP详解卷1:协议》第3章 IP:网际协议(2)-读书笔记
  2. 机房收费系统学生下机结账小结
  3. ASA8.4policy-map接口和全局执行的优先级测试:
  4. 初步了解并使用正则表达式 (REGular EXPression)
  5. Learning Perl 4
  6. 解放学校网络管理员的双手 ——陕西省基础教育专网×××接入程序的优化
  7. web2.0网站的配色参考方案
  8. 深度学习端上部署工具
  9. SDNU 1300.转圈游戏(快速幂)
  10. leetcode28. 实现strStr()