基于TCP的网络聊天室的设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于TCP的网络

聊天室的设计

【基于TCP的网络聊天室的设计】-实验指导

∙一、实验目的

1.掌握通信规范的制定及实现。

2.练习较复杂的网络编程,能够把协议设计思想应用到现实应用中。

1.二、实验内容和要求

1.进一步熟悉VC++6编程环境;

2.利用VC++6进行较复杂的网络编程,完成网络聊天室的设计及编写;

三、实验(设计)仪器设备和材料

1.计算机及操作系统:PC机,Windows;

2.网络环境:可以访问互联网;

∙四、TCP/IP程序设计基础

基于TCP/IP的通信基本上都是利用SOCKET套接字进行数据通讯,程序一般分为服务器端和用户端两

部分。设计思路(VC6.0下):

第一部分服务器端

一、创建服务器套接字(create)。

二、服务器套接字进行信息绑定(bind),并开始监听连接(listen)。

三、接受来自用户端的连接请求(accept)。

四、开始数据传输(send/receive)。

五、关闭套接字(closesocket)。

第二部分客户端

一、创建客户套接字(create)。

二、与远程服务器进行连接(connect),如被接受则创建接收进程。

三、开始数据传输(send/receive)。

四、关闭套接字(closesocket)。

CSocket的编程步骤:(注意我们一定要在创建MFC程序第二步的时候选上Windows Socket选项,其中ServerSocket是服务器端用到的,ClientSocket是客户端用的。)???

(1)构造CSocket对象,如下例:

CSocket ServerSocket;

CSocket ClientSocket;

(2)CSocket对象的Create函数用来创建Windows Socket,Create()函数会自行调用Bind()函数

将此Socket绑定到指定的地址上面。如下例:

ServerSocket.Create(823); //服务器端需要指定一个端口号,我们用823。

ClientSocket.Create(); //客户端不用指定端口号。

(3)现在已经创建完基本的Socket对象了,现在我们来启动它,对于服务器端,我们需要这个Socket 不停的监听是否有来自于网络上的连接请求,如下例:

ServerSocket.Listen(5);//参数5是表示我们的待处理Socket队列中最多能有几个Socket。

(4)对于客户端我们就要实行连接了,具体实现如下例:

ClientSocket.Connect(CString SerAddress,Unsinged int SerPort);//其中SerAddress是服务器

的IP地址,SerPort是端口号。

(5)服务器是怎么来接受这份连接的呢?它会进一步调用Accept(ReceiveSocket)来接收它,而此时服务器端还须建立一个新的CSocket对象,用它来和客户端进行交流。如下例:

CSocket ReceiveSocket;

ServerSocket.Accept(ReceiveSocket);

(6)如果想在两个程序之间接收或发送信息,MFC也提供了相应的函数。如下例:ServerSocket.Receive(String,Buffer); //String是你要发送的字符串,Buffer是发送字符串的缓冲区大小。ServerSocket.Send(String,Butter);//String是你要接收的字符串,Buffer是接收字符串的

缓冲区大小。

框架实现:

客户端在MFC中创建对话框:

void CClientDlg::OnButtonReceive()

{

CString strAddr="202.112.73.150";

unsigned int nPort=5050;

if(!ChatReceive.Create())

{

MessageBox("create failed","Receive",MB_ICONSTOP);

return;

}

else

{

ChatReceive.Connect(strAddr,nPort);

}

char sReceive[1024];

strAddr.Format(sReceive);

ChatReceive.Receive(sReceive,1024,0);

m_strEdit=sReceive;

UpdateData(FALSE);

ChatReceive.Close();

}???

服务器端创建对话框:

void CServerDlg::OnButtonSend()

{

// TODO: Add your control notification handler code here

CString strSendText;

unsigned int nPort=5050;

GetDlgItemText(IDC_EDIT,strSendText);

if(!ChatSend.Create(nPort))

MessageBox("create failed");

else

{

ChatSend.Listen();

ChatSend.Accept(server);

}

server.Send(strSendText,1000,0);

server.Close();

ChatSend.Close();

}??

五、基于TCP的网络聊天室的设计要求:?

(1)制定通信规范。

(2)设计界面如下:

1 服务器端

2 客户端

相关文档
最新文档