C#简易即时通信windows应用程序Word格式文档下载.docx
- 文档编号:18343741
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:18
- 大小:215.12KB
C#简易即时通信windows应用程序Word格式文档下载.docx
《C#简易即时通信windows应用程序Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C#简易即时通信windows应用程序Word格式文档下载.docx(18页珍藏版)》请在冰豆网上搜索。
4.3.1服务器端........................................................................…………
4.3.2客户端................................................................................……..
结论...........................................................................................................…….
参考文献.................................................................................................…….....
⏹第1章项目开发引言
⏹1.1项目开发的背景和意义
近年来,随着全球信息化进程的不断发展,网络也在飞速发展。
出于高效、快速地处理各种事务的目的,越来越多的企业在其内部使用局域网来进行工作。
在内部局域网的帮助下,企业得以简化信息流程,提高信息交换的速度,从而提高工作效率。
然而,随着企业规模的扩大,业务量的增加,在局域网上运行的应用越来越多,如知识库、网络会议、数据库应用和数据的同步与备份等,这些应用对局域网的信息吞吐、处理能力的要求也越来越高。
这些在企业内部原有局域网设计之初未曾考虑到的新情况的出现使得局域网不堪重负,容易发生信息阻塞,此时,局域网不但不能提高生产效率,反而成为企业发展的瓶颈。
为了解决上述矛盾,人们提出了许多方法。
提升网络带宽及增加服务器的吞吐能力是解决此矛盾的一种方法。
然而,从企业运行的成本方面考虑,无论是单纯地提升网络带宽或增加服务器的吞吐能力都不能从根本上解决局域网资源紧张的问题,对旧有局域网的大规模硬件改造反而会增加企业的负担。
此次开发设计的系统是以一种基于Tcp/ip协议下,主要采用Socket套接字多线程的局域网通信工具的设计与实现方法。
基于Socket的局域网聊天工具是此类局域网通信软件的具体实例之一,它很好地诠释了Socket通信的原理,并且在企业内部通信、教学、讨论等应用中都具有一定的实用价值。
它具有信息收发速度快,保密性好,占用网络带宽资源低,占用服务器吞吐能力低,易于编程实现等优点。
⏹1.2项目开发的方法和主要工作
本项目是参考学习《C#程序设计与案例教程》、《VisualC#网络编程技术与实践》而进行项目实践开发,集中主要掌握和熟悉windowssockets套接字的学习和使用方法.此次本项目所涉及到主要功能模块的代码实践,均参照2本书上的讲解和案例,并对其案例进行消化分析,然后采用自己熟悉的代码编写习惯进行编写。
对于本次项目的开发、设计,在参照书上案例教程同时,我们小组进行了分工实践和修改,例如一些界面的设计的统一,项目专用词的统一等.在学习C#windows程序设计和项目开发的同时,我们小组2名成员分别利用网络教学资源,以及查阅相关图书资料,整个项目代码实例,并在完成C#windows程序设计课程相关重点知识学习后,通过小组2名组员的共同努力,完成了此次项目的实践,了解和熟悉掌握C#windows课程知识,同时使项目得以顺利实践运.
⏹1.3项目开发的环境和主要技术介绍
◆1.3.1开发的环境介绍
A.硬件环境:
HPCompaq6510b,内存2G,处理器Intel(R)Core(TM)DuoCPUT7250@2.00GHz.
B.开发环境和开发平台:
windows732位操作系统,VisualStudio2005,开发语言C#.
C.网络环境:
局域网
◆1.3.2项目开发主要介绍
A.TCP/IP网络协议
协议是对等的网络实体之间通信的规则,可以简单地理解为网络上各计算机彼此交流的一种“语言”。
网络通信协议设计的基本原则是层次化,层和协议的集合被称为网络体系结构。
相邻层之间的接口定义了下层向上层提供的基本操作和服务,下层向上层提供的服务分两种形式:
面向连接的服务和无连接的服务。
计算机网络中已经形成的网络体系结构主要有两个:
OSI参考模型和TCP/IP参考模型。
TCP/IP参考模型是因特网(Internet)的基础。
和OSI的7层协议相比,TCP/IP协议只有4个层次。
通常说的TCP/IP是一组协议的总称,TCP/IP实际上是一个协议族,包括100多个相互关联的协议,其中IP(InternetProtocol,网际协议)是网络层最主要的协议;
TCP(TransmissionControlProtocol,传输控制协议)和UDP(UserDatagramProtocol,用户数据报协议是传输层中最主要的协议),一般认为IP、TCP、UDP是最根本的三种协议,是其他协议的基础。
B.套接字(Socker)
套接字可以理解位编写网络通信软件的函数库,在套接字中封装了为进行网络通信而设计的一组公共函数,网络通信软件通过调用这些公共函数,完成在忘改其他计算机中运行的指定网络通信软件间的双向通信,因此次项目的开发是基于TCP/IP网络协议,为了提高效率,所以,我们采用了开发基于Socket套接字的网络通信程序的一些类,其中包括了TcpClient类、TcpListener类和UdpClient类。
TcpClient类和TcpListener类是专门用于TCP协议变成的类,这两个类封装了底层的套接字,并分别提供了对Socket进行封装后的同步和异步操作方法,降低了TCP应用的编程难度,TcpClient类用于连接、发送和接收数据。
TcpListenner类则用于监听是否有传入的连接请求。
此次项目的开发,我们才用的是一般的客户机/服务器模式,分别建立了客户机和服务器程序.
⏹第2章项目功能流程介绍
⏹2.1服务器端程序
(1)建立套接字。
(2)将套接字绑定用于UDP通信的本地IP地址和端口上。
(3)用ReceieveFrom()方法接收数据。
(4)用SendTo()方法发送数据。
(5)
Socket()
Bind()
ReceiveFrom()
SendTo()
Close()
关闭套接字。
⏹2.2客户端程序
(1)
建立套接字。
(2)
将套接字绑定到用于UDP通信的本地IP地址和端口上。
(3)用SendTo()方法发送数据。
(4)用ReceiveFrom()方法接收数据。
⏹第3章主要模块功能实现
服务器端策程序建立TcpListener对象利用该对象的Start()方法启动监听,使用AcceptSocket()方法从传入连接请求队列提取连接,并得到TcpClient对象,利用TcpClient对象的GetStream()方法建立NetworkStream对象,通过该网络流就可以和客户端之间收发信息:
客户端程序建立TcpClient对象,建立成功,即服务器连接成功,再利用该对象的GetStream()方法建立NetworkStream对象,通过该网络流就可以和服务器之间收发信息。
此外为了不断读取信息,服务器和客户端均建立单独的线程。
其代码如下:
……
UsingSystem.Threading;
UsingSystem.IO;
UsingSystem.Net;
Usingsystem.Net.Sockets;
PublicclassForm1:
System.Windows.Forms.Form
{
……
TcpClientclient;
NetWorkStreamstream;
Threadth;
PrivatevoidForm1_Load(objectsender,System.EventArgse)
{
textBox1.ReadOnly=true;
textBox2.Enabled=false;
button2.Enabled=false;
}
Privatevoidbutton1_Click(objectsender,System.EventArgse)
try
{
IPAddresslocalAddr=IPAddress.Parse(“127.0.0.1”);
TcpListenerserver=newTcpListener(localAddr,555);
textBox1.Enabled=”启动服务器成功,等待客户连接……\r\n”;
server.Start();
client=server.AcceptTcpClient();
textBox2.Enabled=true;
button2.Enabled=true;
textBox2.Focus();
stream=client.GetStream();
th=newThreadStart(readData));
th.Start();
}
}
服务器端程序,为开始接受网络连接请求,在按钮中初始化Socket,然后使用BeginAccept方法开始接受新连接。
当套接字上接收到新连接请求是,将调用接受回调方法。
它负责获取将处理连续的Soceket实例,并将Soket提交给将处理请求的线程。
接受回调方法实现AsyncCallback委托,它返回Void,并带一个IAsyncResult类型的参数。
隐私在等待来自客户端的连接时不断挂起服务的应用程序的执行。
客户端建立套接字后,也启动BeginConnect与服务器连接。
当连接成功时,将调用接受回调的方法,同样在等待与服务器连接时不挂起客户端应用程序的执行。
代码如下:
IntbytesSent=sender.Send(msg);
IntbytesRec=sender.Receive(bytes);
Console.WriteLine(“Echoedtest={0}”,Encoding.ASCII.GetString(bytes,,bytesRec));
sender,Shutdown(SocketShutdown.Both);
sender.Close();
Cathch(ArgumentNullExceptionane)
Console.WriteLine(“ArgumentNullException:
{0}”,ane.ToString());
Catch(SocketExceptionse)
Console.WriteLine(“SocketException:
{0}”,se.ToString());
Catch(Exceptione)
Console.WriteLine(“Unexceptedexception:
{0}”,e.ToString());
Catch(Exceptione)
Console.WriteLine(e.ToString());
}
PublicstasticintMain(String[]args)
StartClient();
Return0;
⏹第4章项目具体开发
⏹4.1项目功能简介
本程序是基于TCP/IP网络通讯编程,采用C#语言进行编写的一个windows应用程序,本应用程序能过实现客户与服务端的一对一聊天,客户端和服务端的界面设计基本相似,窗体上都有2个文本框和2个按钮。
服务器端程序是接受网络连接请求,建立新连接。
客户端在于和服务端记性成功连接,发送信息,服务端接受信息,实现即时通信功能。
⏹4.2整个项目重点实现功能模块
服务器端
1接收模块:
读取客户端发来的数据
2发送模块:
发送编辑好的文本信息传给客户端
客户端
1接受模块:
接受服务端发来的数据
2创建客户端TCP/IP套接字
3发送模块:
发送文本信息给服务端
⏹4.3项目功能具体模块的设计与代码的实现
◆4.3.1服务器端
①服务器端窗口界面设计
服务端界面代码:
privatevoidInitializeComponent()
{
this.textBox1=newSystem.Windows.Forms.TextBox();
this.textBox2=newSystem.Windows.Forms.TextBox();
this.button1=newSystem.Windows.Forms.Button();
this.button2=newSystem.Windows.Forms.Button();
this.SuspendLayout();
//textBox1
this.textBox1.Location=newSystem.Drawing.Point(8,40);
this.textBox1.Multiline=true;
this.textBox1.Name="
textBox1"
;
this.textBox1.ScrollBars=System.Windows.Forms.ScrollBars.Vertical;
this.textBox1.Size=newSystem.Drawing.Size(264,96);
this.textBox1.TabIndex=0;
//textBox2
this.textBox2.Location=newSystem.Drawing.Point(16,144);
this.textBox2.Name="
textBox2"
this.textBox2.Size=newSystem.Drawing.Size(184,21);
this.textBox2.TabIndex=1;
//button1
this.button1.Location=newSystem.Drawing.Point(208,144);
this.button1.Name="
button1"
this.button1.Size=newSystem.Drawing.Size(56,24);
this.button1.TabIndex=2;
this.button1.Text="
发送"
this.button1.Click+=newSystem.EventHandler(this.button1_Click);
//button2
this.button2.Location=newSystem.Drawing.Point(16,8);
this.button2.Name="
button2"
this.button2.Size=newSystem.Drawing.Size(248,24);
this.button2.TabIndex=3;
this.button2.Text="
启动服务"
this.button2.Click+=newSystem.EventHandler(this.button2_Click);
//Form1
this.AutoScaleBaseSize=newSystem.Drawing.Size(6,14);
this.ClientSize=newSystem.Drawing.Size(280,173);
this.Controls.Add(this.button2);
this.Controls.Add(this.button1);
this.Controls.Add(this.textBox2);
this.Controls.Add(this.textBox1);
this.Name="
Form1"
this.Text="
服务器端"
this.Load+=newSystem.EventHandler(this.Form1_Load);
this.Closing+=newSystem.ComponentModel.CancelEventHandler(this.Form1_Closing);
this.ResumeLayout(false);
this.PerformLayout();
图一.服务器端界面
②创建服务器端的TCP/IP套接字并且启动异步接收数据
privatevoidbutton2_Click(objectsender,System.EventArgse)
IPAddressipAddress=IPAddress.Parse("
127.0.0.1"
);
IPEndPointlocalEndPoint=newIPEndPoint(ipAddress,5555);
SocketserverSocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
try{
serverSocket.Bind(localEndPoint);
serverSocket.Listen(100);
serverSocket.BeginAccept(newAsyncCallback(AcceptCallback)
serverSocket);
//
}catch(Exceptionee)
Console.WriteLine(ee.ToString());
publicvoidAcceptCallback(IAsyncResultar)
SocketserverSocket=(Socket)ar.AsyncState;
SocketclientSocket=serverSocket.EndAccept(ar);
state=newStateObject();
state.workSocket=clientSocket;
Send("
连接服务器成功"
clientSocket.BeginReceive(state.buffer,0,StateObject.BufferSize,0,
newAsyncCallback(ReadCallback),state);
③接收模块:
publicvoidReadCallback(IAsyncResultar)
StateObjectstate=(StateObject)ar.AsyncState;
SocketclientSocket=state.workSocket;
intbytesRead=clientSocket.EndReceive(ar);
if(bytesRead>
0)
Stringstr=Encoding.Unicode.GetString(state.buffer,0,bytesRead);
textBox1.AppendText("
客户端对服务器说:
"
+str+"
\r\n"
④发送模块:
privatevoidSend(Stringdata)
byte[]byteData=Encoding.Unicode.GetBytes
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 简易 即时 通信 windows 应用程序
![提示](https://static.bdocx.com/images/bang_tan.gif)