TCP实验报告 计算机网络
时间:2025-05-14
时间:2025-05-14
计算机网络实验报告
——TCP客户/服务器应用程序设计
姓名: 班级:
一.实验目的
实现在TCP方式下客户端和服务器端的数据传输过程。 二.实验要求
编程实现一个聊天室系统。该系统首先必须设立服务器,建立完成后必须建立与服务器的连接。建立成功后可以接收客户端输入的信息。该系统包括客户端和服务器端两部分。用户通过客户端发送消息。服务器端在收到消息后,显示在主界面上
实验报告要求有实现过程的流程图,对主要的函数及其参数给予说明,要有实现过程的主要程序段,并对各段程序的功能及作用进行说明。
三.程序实验原理及流程图
在TCP/IP协议下,通讯是建立在服务器与客户端之间的。由客户端想服务器发送连接请求,服务器响应后建立连接,然后才能开始进行通讯。一下是实现的流程图。
系统工作流程:
四.节目设计
在VC++的MFC下创建基于对话框模式的TCP服务器端和TCP客户端,设置控件并调整相应的属性。下面是初始化的效果:
五.主要函数及其参数说明 1、服务器端
1)BOOL CCSocketDlg::OnInitDialog() 用于初始化对话框。在这个这个系统自动生成的函数中添加对进程的控制。
count=0;
m_list.InsertColumn(0,"消息");
m_list.SetColumnWidth(0,435); m_edit.SetLimitText(99); for (int i=0;i<50;i++)
msgsock[i]=NULL;
//设定地址
serv.sin_addr.s_addr=htonl(INADDR_ANY); serv.sin_family=AF_INET; serv.sin_port=5000;//htons(5000); addlen=sizeof(serv);
m_button.EnableWindow(FALSE); //创建socket
sock=socket(AF_INET,SOCK_STREAM,0); //绑定
if (bind(sock,(sockaddr*)&serv,addlen)){ } else{
m_edit.SetWindowText("绑定错误");
//m_list.InsertItem(count++,inet_ntoa(serv.sin_addr)); m_edit.SetWindowText("服务器创建成功"); //开始侦听 listen(sock,5); //调用线程
AfxBeginThread(&thread,0);
2)getcount() 用于获得还没有使用的socket数组号
int CCSocketDlg::getcount(){
for (int i=0;i<50;i++){
if (msgsock[i]==NULL)
return i;}
return -1;
}
3)OnButton1()用于发送数据,是按钮
//发送数据
void CCSocketDlg::OnButton1() { }
4)sendtoall(SOCKET s,char *buff)用于向所有客户发送数据,适用于多客户聊天模式。 void CCSocketDlg::sendtoall(SOCKET s,char *buff){ } 2.客户端
1)OnButton2() 用于连接服务器
for (int i=0;i<50;i++){ }
if (msgsock[i]!=NULL && msgsock[i]!=s)
//发送
send(msgsock[i],buff,100,0);
char buff[100];
m_edit.GetWindowText(buff,99); m_edit.SetWindowText(""); m_list.InsertItem(count++,buff); CSize size; size.cx=0; size.cy=30; m_list.Scroll(size); //循环向所有客户发送信息 for (int i=0;i<50;i++){ }
if (msgsock[i]!=NULL) send(msgsock[i],buff,100,0);
点击后的动作。
void CCSocketcliDlg::OnButton2() { }
2)OnDisconnect() 断开连接 void CCSocketcliDlg::OnDisconnect() { }
3)OnButton1() 发送信息 void CCSocketcliDlg::OnButton1() {
char buff[100]; CSize size; size.cx=0; size.cy=30; //获得发送信息
m_edit.GetWindowText(buff,99); m_edit.SetWindowText(""); ee=0;
closesocket(clisock); char ipaddress[35];
m_edit2.GetWindowText(ipaddress,30); cli.sin_addr.s_addr=inet_addr(ipaddress); cli.sin_family=AF_INET; cli.sin_port=5000;//htons(5000); //创建socket
clisock=socket(AF_INET,SOCK_STREAM,0); ee=1; //启动线程
AfxBeginThread(thread,0);
}
m_list.InsertItem(count++,buff); m_list.Scroll(size); //发送数据
send(clisock,buff,100,0);
4)OnPaint() 屏幕显示 void CCSocketcliDlg::OnPaint() { }
六.系统运行演示
在客户端的“服务器地址”中输入本机地址:127.0.0.1,单击连接按钮。系统提示连接 } else{ }
CDialog::OnPaint(); // Draw the icon
dc.DrawIcon(x, y, m_hIcon);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2;
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); if (IsIconic()){
CPaintDC dc(this); // device context for painting
成功。服务器端显示出连接成功,并输出请求连接的客户的IP地址。并激活服务器端的“发送”按钮。
服务器默认向客户端发送“服务器创建成功”,点击“发送”按钮发送信息。然后可以开始正常通讯。
单击客户端的“断开”按钮,之后“断开”按钮灰化,服务器端屏幕显示Disconnected提示。
单击“退出”,则直接关闭窗口。
…… 此处隐藏:1071字,全部文档内容请下载后查看。喜欢就下载吧 ……