TCP实验报告 计算机网络

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else{
CDialog::OnPaint();
}
}
六.系统运行演示
在客户端的“服务器地址”中输入本机地址:127.0.0.1,单击连接按钮。系统提示连接成功。服务器端显示出连接成功,并输出请求连接的客户的IP地址。并激活服务器端的“发送”按钮。
cli.sin_family=AF_INET;
cli.sin_port=5000;//htons(5000);
//创建socket
clisock=socket(AF_INET,SOCK_STREAM,0);
ee=1;
//启动线程
AfxBeginThread(thread,0);
}
2)OnDisconnect()断开连接
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);
服务器默认向客户端发送“服务器创建成功”,点击“发送”按钮发送信息。然后可以开始正常通讯。
单击客户端的“断开”按钮,之后“断开”按钮灰化,服务器端屏幕显示Disconnected提示。
单击“退出”,则直接关闭窗口。
计算机网络实验报告
——TCP客户/服务器应用程序设计
姓名:
班级:
一.实验目的
实现在TCP方式下客户端和服务器端的数据传输过程。
二.实验要求
编程实现一个聊天室系统。该系统首先必须设立服务器,建立完成后必须建立与服务器的连接。建立成功后可以接收客户端输入的信息。该系统包括客户端和服务器端两部分。用户通过客户端发送消息。服务器端在收到消息后,显示在主界面上
四.节目设计
在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);
}
}
4)sendtoall(SOCKET s,char *buff)用于向所有客户发送数据,适用于多客户聊天模式。
void CCSocketDlg::sendtoall(SOCKET s,char *buff){
for (int i=0;i<50;i++){
if (msgsock[i]!=NULL && msgsock[i]!=s)
实验报告要求有实现过程的流程图,对主要的函数及其参数给予说明,要有实现过程的主要程序段,并对各段程序的功能及作用进行说明。
三.程序实验原理及流程图
在TCP/IP协议下,通讯是建立在服务器与客户端之间的。由客户端想服务器发送连接请求,服务器响应后建立连接,然后才能开始进行通讯。一下是实现的流程图。
系统工作流程:
//获得发送信息
m_edit.GetWindowText(buff,99);
m_edit.SetWindowText("");
m_list.InsertItem(count++,buff);
m_list.Scroll(size);
//发送数据
send(clisock,buff,100,0);
}
4)OnPaint()屏幕显示
void CCSocketcliDlg::OnPaint() {
if (IsIconic()){
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
return i;}
return -1;
}
3)OnButton1()用于发送数据,是按钮 点击后的动作。
//发送数据
void CCSocketDlg::OnButton1()
{
char buff[100];
m_edit.GetWindowText(buff,99);
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)
void CCSocketcliDlg::OnDisconnect()
{Fra Baidu bibliotek
ee=0;
closesocket(clisock);
}
3)OnButton1()发送信息
void CCSocketcliDlg::OnButton1()
{
char buff[100];
CSize size;
size.cx=0;
size.cy=30;
// 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;
//绑定
if (bind(sock,(sockaddr*)&serv,addlen)){
m_edit.SetWindowText("绑定错误");
}
else{
//m_list.InsertItem(count++,inet_ntoa(serv.sin_addr));
m_edit.SetWindowText("服务器创建成功");
//发送
send(msgsock[i],buff,100,0);
}
}
2.客户端
1)OnButton2()用于连接服务器
void CCSocketcliDlg::OnButton2()
{
char ipaddress[35];
m_edit2.GetWindowText(ipaddress,30);
cli.sin_addr.s_addr=inet_addr(ipaddress);
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);
相关文档
最新文档