计算机网络课程设计报告聊天程序.docx

上传人:b****6 文档编号:6179071 上传时间:2023-01-04 格式:DOCX 页数:13 大小:118.02KB
下载 相关 举报
计算机网络课程设计报告聊天程序.docx_第1页
第1页 / 共13页
计算机网络课程设计报告聊天程序.docx_第2页
第2页 / 共13页
计算机网络课程设计报告聊天程序.docx_第3页
第3页 / 共13页
计算机网络课程设计报告聊天程序.docx_第4页
第4页 / 共13页
计算机网络课程设计报告聊天程序.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

计算机网络课程设计报告聊天程序.docx

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

计算机网络课程设计报告聊天程序.docx

计算机网络课程设计报告聊天程序

计算机网络

课程设计报告

 

题目:

网络聊天程序的设计与实现

姓名:

申超明

学号:

0705010313

班级:

计算机3班

指导老师:

文宏

 

湖南科技大学计算机科学与工程学院

2010年9月

一:

实验名称

网络聊天程序的设计与实现

二:

实验目的

了解Socket通信的原理,并通过程序实现通信的过程。

三:

实验要求

熟悉Socket程序通信过程,熟悉在通信过程中流之间的转换。

程序中熟悉灵活运用线程执行相关操作。

四:

实验原理

Socket通信的原理还是比较简单的,它大致分为以下几个步骤。

服务器端的步骤如下:

建立服务器端的Socket,开始侦听整个网络中的连接请求。

当检测到来自客户端的连接请求时,向客户端发送收到连接请求的信息,并建立与客户端之间的连接。

当完成通信后,服务器关闭与客户端的Socket连接。

客户端的步骤如下:

建立客户端的Socket,确定要连接的服务器的主机名和端口。

发送连接请求到服务器,并等待服务器的回馈信息。

连接成功后,与服务器进行数据的交互。

数据处理完毕后,关闭自身的Socket连接。

五:

程序截图:

图1-服务器端启动服务器

图2-客户端连接数据库

图3-客户端发送消息

图4-服务器段接收客户端发送过来的消息

六:

程序代码:

Qserver.cs

usingSystem;

usingSystem.Collections.Generic;

usingSystem.ComponentModel;

usingSystem.Data;

usingSystem.Drawing;

usingSystem.Text;

usingSystem.Windows.Forms;

usingSystem.IO;

usingSystem.Net;

usingSystem.Net.Sockets;

usingSystem.Threading;

namespaceWindowsApplication2

{

publicpartialclassqserver:

Form

{

publicqserver()

{

InitializeComponent();

}

privatestringipv4;

privatevoidForm1_Load(objectsender,EventArgse)

{

IPAddress[]ip=Dns.GetHostAddresses(Dns.GetHostName());

ipv4=ip[0].ToString();

this.label4.Text=ipv4;

}

TcpListenertcpls;

Socketsk;

NetworkStreamns;

StreamReadersr;

StreamWritersw;

Threadtred;

privatevoidbutton1_Click(objectsender,EventArgse)

{

tcpls=newTcpListener(1235);

tcpls.Start();

MessageBox.Show("服务器已启动");

this.button1.Enabled=false;

sk=tcpls.AcceptSocket();

MessageBox.Show("客户端已连接");

ns=newNetworkStream(sk);

sr=newStreamReader(ns,Encoding.UTF8);

sw=newStreamWriter(ns,Encoding.UTF8);

}

stringsmessage="";

privatevoidbutton2_Click(objectsender,EventArgse)

{

this.textBox1.Focus();

tred=newThread(newThreadStart(this.acceptcm));

tred.Start();

this.textBox2.Focus();

}

privatevoidbutton3_Click(objectsender,EventArgse)

{

sendtoc();

this.textBox2.Focus();

}

privatevoidtextBox2_KeyPress(objectsender,KeyPressEventArgse)

{

if(e.KeyChar=='\r')

sendtoc();

}

privatevoidacceptcm()

{

lock(this)

{

try

{

if(sr.ReadLine()!

=null)

{

this.textBox1.Text+=sr.ReadLine();

}

else

return;

}

catch(System.Exceptionex)

{

}

finally

{

tred.Abort();

}

}

}

publicvoidsendtoc()

{

try

{

smessage="\r\n"+this.textBox3.Text+"("+DateTime.Now.ToLongTimeString()+")"+""+this.textBox2.Text;

this.textBox1.Text+=smessage;

this.textBox2.Clear();

sw.WriteLine(smessage);

sw.Flush();

}

catch

{

MessageBox.Show("服务器端错误");

}

}

privatevoidqserver_FormClosed(objectsender,FormClosedEventArgse)

{

if(tcpls!

=null)

tcpls.Stop();

//if(tred!

=null)

//tred.Abort();

Application.Exit();

}}}

客户端代码:

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

{

publicpartialclassqclient:

Form

{

publicqclient()

{

InitializeComponent();

}

TcpClienttcpct;

NetworkStreamns;

StreamReadersr;

StreamWritersw;

Threadtrdc;

///

///连接服务器操作,发送socket请求

///

///

///

privatevoidbutton1_Click(objectsender,EventArgse)

{

try

{

stringip=this.textBox4.Text+"."+this.textBox5.Text+"."+this.textBox6.Text+"."+this.textBox7.Text;

tcpct=newTcpClient(ip,1235);

ns=tcpct.GetStream();

sr=newStreamReader(ns);

sw=newStreamWriter(ns);

this.button1.Enabled=false;

}

catch

{

MessageBox.Show("请确认是否开启服务器...");

}

}

stringcmessage="";

///

///发送消息事件

///

///

///

privatevoidbutton2_Click(objectsender,EventArgse)

{

try

{

sendtos();

}

catch

{

//MessageBox.Show("出错啦!

"+"\r\n"+"1.你是否已经连接服务器?

"+"\r\n"+"2.等待服务器发回消息.");

}

finally

{

this.textBox2.Focus();

}

}

///

///发送函数

///

publicvoidsendtos()

{

if(this.textBox2.Text=="")//发送

{

MessageBox.Show("内容不能为空");

return;

}

else

{

cmessage="("+DateTime.Now.ToLongTimeString()+")"+"\r\n"+this.textBox3.Text+this.textBox2.Text;

this.textBox1.Text+=cmessage;

this.textBox2.Clear();

//savechathistrory();

sw.WriteLine(cmessage);

sw.Flush();

}

}

///

///接收函数

///

publicvoidacceptsm()

{

lock(this)

{

try//接收

{

this.textBox1.Text+=sr.ReadLine()+"\r\n";

//savechathistrory();

}

catch

{

//MessageBox.Show("出错啦!

"+"\r\n"+"1.你是否已经连接服务器?

"+"\r\n"+"2.没有服务器消息.");

}

finally

{

trdc.Abort();

}

}

}

///

///接收消息事件

///

///

///

privatevoidbutton3_Click(objectsender,EventArgse)

{

this.textBox1.Focus();

trdc=newThread(newThreadStart(acceptsm));

trdc.Start();

this.textBox2.Focus();

}

///

///保存历史记录,未做.

///

privatevoidsavechathistrory()

{

StreamWriterfsw=newStreamWriter(Application.UserAppDataPath+"chathistory.txt",false,Encoding.UTF8);

sw.WriteLine(this.textBox1.Text);

fsw.Flush();

fsw.Close();

}

///

///文件关闭之后,关闭客户端,关闭活动的线程

///

///

///

privatevoidqclient_FormClosed(objectsender,FormClosedEventArgse)

{

if(tcpct!

=null)

tcpct.Close();

Application.Exit();

}

///

///历史记录查看,未做。

///

///

///

privatevoidbutton4_Click(objectsender,EventArgse)

{

}

///

///按回车发送

///

///

///

privatevoidtextBox2_KeyPress(objectsender,KeyPressEventArgse)

{

if(e.KeyChar=='\r')

sendtos();

}

privatevoidqclient_Load(objectsender,EventArgse)

{

}

}

}、

七:

实验总结与心得

通过本次实验,我熟悉了Socket通信的基本原理。

更深一步熟悉程序中Socket通信过程中,流的传递。

同时也更深一步了解到线程在程序中的作用。

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

当前位置:首页 > 表格模板 > 合同协议

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

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