基于Socket的聊天室C版.docx

上传人:b****6 文档编号:7536167 上传时间:2023-01-24 格式:DOCX 页数:12 大小:216.70KB
下载 相关 举报
基于Socket的聊天室C版.docx_第1页
第1页 / 共12页
基于Socket的聊天室C版.docx_第2页
第2页 / 共12页
基于Socket的聊天室C版.docx_第3页
第3页 / 共12页
基于Socket的聊天室C版.docx_第4页
第4页 / 共12页
基于Socket的聊天室C版.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

基于Socket的聊天室C版.docx

《基于Socket的聊天室C版.docx》由会员分享,可在线阅读,更多相关《基于Socket的聊天室C版.docx(12页珍藏版)》请在冰豆网上搜索。

基于Socket的聊天室C版.docx

基于Socket的聊天室C版

公司内部档案编码:

[OPPTR-OPPT28-OPPTL98-OPPNN08]

 

基于Socket的聊天室C版

一、服务器/客户端聊天室模型

1.首先启动聊天室服务器,使得TcpListener开始监听端口,此时TcpListener会进入Pending状态,等待客户端连接;

2.其次,当有客户端连接后,通过AccepSocket返回与客户端连接的Socket对象,然后通过读写Socket对象完成与聊天室客户端的数据传输。

聊天室客户端成功启动后,首先创建一个Socket对象,然后通过这个Socket对象连接聊天室服务器,连接成功后开通Socket完成数据的接收和发送处理。

二、系统功能设计

本设计为一个简单的聊天室工具,设计基本的聊天功能,如聊天、列表维护等。

系统主要为两大块:

聊天室服务器及聊天室客户端。

服务器界面设计如下:

 

客户端界面设计如下:

 

三、聊天协议的应答

A—网络—B

主机与主机通信主要识别身份(标识设备用IP)及通信协议

网络应用程序——端口号——接收数据

注:

地址是总机,端口号是分机(传输层)

2.端口号为16位二进制数,范围0到65535,但实际编程只能用1024以上端口号

 

Socket编程

首先,我们了解常用网络编程协议。

我们用得最多的协议是UDP和TCP,UDP是不可靠传输服务,TCP是可靠传输服务。

UDP就像点对点的数据传输一样,发送者把数据打包,包上有收信者的地址和其他必要信息,至于收信者能不能收到,UDP协议并不保证。

而TCP协议就像(实际他们是一个层次的网络协议)是建立在UDP的基础上,加入了校验和重传等复杂的机制来保证数据可靠的传达到收信者。

一个是面向连接一个无连接,各有用处,在一些数据传输率高的场合如视频会议倾向于UDP,而对一些数据安全要求高的地方如下载文件就倾向于TCP。

Socket————网络应用程序

电话机————访问通信协议

聊天协议的应答:

聊天状态:

CLOSED和CONNECTED状态

执行CONN命令后进入CONNECTED状态,执行下列命令:

CONN:

连接聊天室服务器

JOIN:

加入聊天(通知其他用户本人已经加入聊天室服务器)

LIST:

列出所有的用户(向客户端发送全部的登录用户名字)

CHAT:

发送聊天信息(公开的聊天信息)

PRIV:

进行私聊(三个参数:

私聊信息用户;接收私聊信息用户;发送信息)

EXIT:

客户端向服务器发送离开请求;

QUIT:

退出聊天,服务器向客户端发送退出命令(执行QUIT命令聊天状态变为CLOSED)

四、系统实现

服务器协议解析:

当有客户端连接聊天室服务器后,服务器立刻为这个客户建立一个数据接收的线程(多用户程序必备)。

在接收线程中,如果收到聊天命令,就对其进行解析处理,服务器可以处理五种命令:

CONN\LIST\CHAT\PRIV\EXIT。

服务器接收到CONN命令,就向其他用户发送JOIN命令告诉有用户加入,然后把当前的全部用户信息返回给刚刚加入的用户,以便在界面上显示用户列表。

当接收到EXIT命令后,就清除当前用户的信息,然后向其他用户发送QUIT命令,告诉其他用户退出了,这些用户的客户端把离开的用户从用户列表中删除。

聊天室客户端的协议解析:

当客户端连接到服务器后,服务器立刻建立一个数据接收的独立线程。

在接收线程中,如果收到了聊天命令,就对其进行解析处理。

聊天室客户端一共处理的命令有五种:

OK\ERR\LIST\JOIN\QUIT命令。

五、程序设计(代码)

服务器端设计:

引入网络操作命名空间、;

线程处理命名空间

第一步:

界面设计及类与相关成员的定义

对界面进行设计(简单)

对内部函数进行设计(要编写一个独立的类即Client类,封装了客户端的信息与连接,每一个客户进入聊天室,就创建一个Client对象,用于保存该用户的信息并接收用户数据和发送信息到客户端)

几个重要的类:

TcpListener类(服务器套接字创建)、Socket类

 

internalstaticHashtableclients=newHashtable();ddressList;

if<1)

{

return"";

}

returnAddresslist[0].ToString();

}

ddressList;

if<2)

{

return"";

}

returnAddresslist[1].ToString();

}

oString()+"|";

}

returnRtn;

}

publicvoidupdateUI(stringmsg)

{

+"\n");

}

privatevoidForm1_FormClosing(objectsender,FormClosingEventArgse)

{

=false;

}

;

}

CONNoUpper()=="OK")

{

oUpper()=="ERR")

{

add("命令执行错误:

"+tokens[1]);

}

elseif(tokens[0]=="LIST")

{

oUpper()=="OK")

{

oUpper()=="ERR")

{

add("命令执行错误:

"+tokens[1]);

}

elseif(tokens[0]=="LIST")

{

//此时从服务器返回的消息格式:

命令标志符LIST|用户名1|用户名2|。

(所有在线用户名)

//add(“获得用户列表”),更新在线用户列表

for(inti=1;i<-1;i++)

{

}

}

elseif(tokens[0]=="JOIN")

{

//此时从服务器返回的消息格式:

命令标志符JOIN|刚刚登入的用户名

add(tokens[1]+"+已经进入了聊天室");

if==tokens[1])

{

=CONNECTED;

}

}

elseif(tokens[0]=="QUIT")

{

if>-1)

{

}

add("用户:

"+tokens[1]+"已经离开");

}

else

{

//如果从服务器返回的其他消息格式,则在ListBox控件中直接显示

//=msg+"\n";

add(msg);

}

}

//关闭连接

();

}

catch

{

add("网络发生错误");

}

}

//设置字体颜色

//向显示消息的rtbMsg中添加信息是通过add函数完成的

privatevoidadd(stringmsg)

{

if(!

{

=color;

}

=msg+"\n";

}

privatevoidbtnExit_Click_1(objectsender,EventArgse)

{

if(true)

{

stringmessage="EXIT|"++"|";

//将字符串转化为字符数组

byte[]outbytes=(outbytes,0,;

=CLOSED;

=true;

}

}

//将“EXIT”命令发送给服务器,此命令格式要与服务器端的命令格式一致

privatevoidForm1_FormClosing(objectsender,FormClosingEventArgse)

{

//btnExit_Click_1(sender,e);

btnExit_Click_1(sender,e);

}

privatevoidbtnColor_Click(objectsender,EventArgse)

{

ColorDialogcolorDialog1=newColorDialog();

=if()==&&

!

={

=;

color=;

}

}

六、程序测试效果

 

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

当前位置:首页 > 高等教育 > 其它

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

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