TCP实验报告 计算机网络

时间: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字,全部文档内容请下载后查看。喜欢就下载吧 ……
TCP实验报告 计算机网络.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219