p2p课程设计.docx

上传人:b****4 文档编号:2968002 上传时间:2022-11-16 格式:DOCX 页数:13 大小:107.67KB
下载 相关 举报
p2p课程设计.docx_第1页
第1页 / 共13页
p2p课程设计.docx_第2页
第2页 / 共13页
p2p课程设计.docx_第3页
第3页 / 共13页
p2p课程设计.docx_第4页
第4页 / 共13页
p2p课程设计.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

p2p课程设计.docx

《p2p课程设计.docx》由会员分享,可在线阅读,更多相关《p2p课程设计.docx(13页珍藏版)》请在冰豆网上搜索。

p2p课程设计.docx

p2p课程设计

辽宁工业大学

基于C/S程序设计课程设计(论文)

 

题目:

 

院(系):

专业班级:

学号:

学生姓名:

指导教师:

教师职称:

助教

起止时间:

2010.6.21至2010.7.3

 

课程设计(报告)任务及评语

院(系):

软件学院教研室:

软件教研窒

学号

学生姓名

专业班级

程序设计(报告)题目

程序设计(报告)任务

程序设计的任务与要求:

(1)掌握C#语言编程的基础知识。

(2)较熟练地编写C#语言应用程序。

(3)了解C#语言的常用类、网络编程技巧、异常处理。

(5)联系已学过的内容,巩固所学的理论,增强独立工作能力。

(6)通过设计主要使学生有一个独立编写程序的过程,对理论学习及动手能力都有一个很大的提高。

(7)通过本次设计,进一步培养学生热爱专业的思想,同时对本专业综合素质的提高起一个积极的推动作用。

课程设计过程中,要严格遵守实践环节的时间安排,听从指导教师的指导。

正确地完成上述内容,记录实习日记,规范完整地撰写出课程设计报告。

指导教师评语及成绩

成绩:

指导教师签字:

2010年7月6日

目录

第1章课程设计的目的与要求1

1.1课程设计目的1

1.2课程设计的实验环境1

1.3课程设计的预备知识1

1.4课程设计要求1

第2章课程设计内2

2.1系统功能2

2.2系统设计2

2.3系统实现4

2.4程序的运行和测试9

第3章课程设计总结12

参考资料13

第1章课程设计的目的与要求

1.1课程设计目的

本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《C#网络程序开发案例》课程后进行的一次全面的综合练习。

本课程设计的目的和任务:

1.巩固和加深学生对C#语言课程的基本知识的理解和掌握

2.掌握C#语言编程和程序调试的基本技能

3.利用C#语言进行基本的网络软件设计

4.掌握书写程序设计说明文档的能力

5.提高运用C#语言解决实际问题的能力

1.2课程设计的实验环境

硬件要求能运行Windows2000/XP操作系统的微机系统。

C#语言程序设计及相应的开发环境。

1.3课程设计的预备知识

熟悉C#语言及.NET开发工具。

1.4课程设计要求

1.分析课程设计题目的要求

2.写出详细设计说明

3.编写程序代码,调试程序使其能正确运行

4.设计完成的软件要便于操作和使用

5.设计完成后提交课程设计报告

第2章课程设计内容

2.1系统功能

局域网聊天工具,是在局域网内部使用的,用户之间用来交流的一个工具,一般都具有文本聊天和文件传输功能。

局域网聊天软件因其使用简单,系统资源消耗少等优点,成为各企事业单位等的局域网内广泛应用的软件之一。

P2P是peer-to-peer的缩写,peer在英语里有“(地位、能力等)同等者”、“同事”和“伙伴”等意义。

这样一来,P2P也就可以理解为“伙伴对伙伴”的意思,或称为对等联网。

目前人们认为其在加强网络上人的交流、文件交换、分布计算等方面大有前途。

简单的说,P2P直接将人们联系起来,让人们通过互联网直接交互。

P2P使得网络上的沟通变得容易、更直接共享和交互,真正地消除中间商。

P2P就是人可以直接连接到其他用户的计算机、交换文件,而不是像过去那样连接到服务器去浏览与下载。

P2P另一个重要特点是改变互联网现在的以大网站为中心的状态、重返“非中心化”,并把权力交还给用户。

P2P看起来似乎很新,但是正如B2C、B2B是将现实世界中很平常的东西移植到互联网上一样,P2P并不是什么新东西。

在现实生活中我们每天都按照P2P模式面对面地或者通过电话交流和沟通。

2.2系统设计

开启服务器,文本聊天窗体加载成功后,将启动监听线程,服务器主要是负责监听局域网内的用户的连接请求。

收到客户发起的连接请求后,若服务器处于空闲状态,弹出消息提示框,对请求进行处理,服务器可以选择接受或者拒绝客户端的连接。

若同意连接,则返回给客户端同意信号,开启服务器的接收信息线程,并置消息发送事件为Enable。

客户端收到服务器返回的同意信号后,也开启接收信息线程,并置消息发送事件为Enable。

通信双方就可以进行文字聊天了。

若服务器端拒绝客户端的连接,则关闭tcpconnect,并关闭网络流,继续执行监听。

客户端得知服务器端关闭tcpconnect并关闭网络流之后,则释放本次socket和网络流。

若已建立连接,当断开连接时,将向对方发送断开信号,然后将释放Socket和网络流,不影响到下一次连接的接入。

文本聊天服务器工作流程如图2.1所示

图2.1流程图

2.3系统实现

1、定义相关变量。

2、集成主窗体创建后,创建一个tcpListener的对象,端口为5000,IP为任意。

创建监听线程wait,wait线程执行的是waitconn()方法,启动监听线程。

调用getMyIP()方法用于获取本地IP地址,并在连接建立时传给对方。

当wait线程监听到远程用户的接入连接请求,弹出消息提示框,用户可以选择同意或拒绝接入请求。

若同意,则创建接收信息线程th,并启动th。

若用户拒绝远程接入请求,则关闭网络流nss,关闭tcps,并调用disconnect()重新初始化相关变量。

3、接收信息时,尝试读取网络流,采用的是Unicode编码。

读取到的消息如果不为断开连接信号,则在聊天记录框里面显示出来;若为断开信号,则执行disconnect()方法关闭当前连接。

4、当无接入请求,则判断用户是否有尝试连接远程服务端事件。

若有,创建TcpClient的对象tcpc,并尝试连接远程主机。

5、连接建立后,用户单击“发送消息”按钮或者在输入文本框内按热键“Alt+S”或“Ctrl+Enter”,触发send_Click事件。

send_Click事件主要是将用户的输入通过Socket,采用网络流的形式传输给远程用户,编码采用Unicode,同时在聊天记录框里面显示出来。

6、断开连接或关闭窗体,需要将Socket、网络流以及接收信息线程th进行关闭,重置各按钮的可用状态。

若是关闭窗体,还需将wait线程关闭。

代码如下:

usingSystem;

usingSystem.Collections.Generic;

usingSystem.ComponentModel;

usingSystem.Data;

usingSystem.Drawing;

usingSystem.Text;

usingSystem.Windows.Forms;

usingSystem.IO;

usingSystem.Net;

usingSystem.Net.Sockets;

usingSystem.Threading;

namespaceclient

{

publicpartialclassclient:

Form

{

privateTcpClientmyTcpclient=null;

privateThreadmyThread=null;

privateNetworkStreammyNst=null;

privateStreamReadermySread=null;

privateStreamWritermySwrite=null;

publicclient()

{

InitializeComponent();

}

privatevoidbutton2_Click(objectsender,EventArgse)//"连接服务器"按钮

{

toolStripStatusLabel1.Text="请稍等......";

myTcpclient=newTcpClient();

myTcpclient.Connect(IPAddress.Parse(textBox1.Text),int.Parse(textBox2.Text));//连接到远程服务端

myNst=myTcpclient.GetStream();//获取数据流

mySread=newStreamReader(myNst,System.Text.Encoding.Default);//创建流读实例

mySwrite=newStreamWriter(myNst,System.Text.Encoding.Default);//创建流写实例

myThread=newThread(newThreadStart(Reading));//创建新线程,用新创建的的线程启动Reading函数

myThread.Start();

MessageBox.Show("连接服务器成功!

");

}

privatevoidReading()//读取对方传送过来的网络数据并在richTextBox1中显示函数实现

{

toolStripStatusLabel1.Text="正在聊天中......";

while(true)

{

for(inti=0;i<4;i++)//经测试发现,mySread.ReadLine()在每一次聊天内容发送之后要读四次,

{             //第一次便是头部标志信息行,第二次读取的是聊天内容,

if(i==0)      //最后两次读取的内容为空,依此设计此显示和染色函数

{

stringyoumsg="\r\n"+mySread.ReadLine();

richTextBox1.AppendText(youmsg);

}

else

{

stringyoumsg="\r\n"+mySread.ReadLine();

richTextBox1.AppendText(youmsg);

richTextBox1.Select(richTextBox1.TextLength-youmsg.Length+1,youmsg.Length);

richTextBox1.SelectionColor=Color.Red;

}

}

}

}

privatevoidbutton1_Click(objectsender,EventArgse)//“发送”按钮

{

stringmymsg=DateTime.Now.ToString()+"<"+"来自:

客户端"+">"+"\r\n"+richTextBox2.Text+"\r\n"+"\r\n";

//MessageBox.Show(mymsg.Length.ToString());

mySwrite.WriteLine(mymsg);//将自己聊天内容写入内存缓冲区

mySwrite.Flush();//将缓冲区内容发入网络流并清空

richTextBox2.Clear();//清空聊天内容编辑框

richTextBox1.AppendText(mymsg);//调用appendtext()函数,在聊天内容显示框显示自己聊天内容

richTextBox1.Select(richTextBox1.TextLength-mymsg.Length+29,mymsg.Length);//选取自己的聊天内容

richTextBox1.SelectionColor=Color.Blue;//对自己聊

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1