TCPIP实验报告.docx

上传人:b****2 文档编号:2126043 上传时间:2023-05-02 格式:DOCX 页数:26 大小:298.28KB
下载 相关 举报
TCPIP实验报告.docx_第1页
第1页 / 共26页
TCPIP实验报告.docx_第2页
第2页 / 共26页
TCPIP实验报告.docx_第3页
第3页 / 共26页
TCPIP实验报告.docx_第4页
第4页 / 共26页
TCPIP实验报告.docx_第5页
第5页 / 共26页
TCPIP实验报告.docx_第6页
第6页 / 共26页
TCPIP实验报告.docx_第7页
第7页 / 共26页
TCPIP实验报告.docx_第8页
第8页 / 共26页
TCPIP实验报告.docx_第9页
第9页 / 共26页
TCPIP实验报告.docx_第10页
第10页 / 共26页
TCPIP实验报告.docx_第11页
第11页 / 共26页
TCPIP实验报告.docx_第12页
第12页 / 共26页
TCPIP实验报告.docx_第13页
第13页 / 共26页
TCPIP实验报告.docx_第14页
第14页 / 共26页
TCPIP实验报告.docx_第15页
第15页 / 共26页
TCPIP实验报告.docx_第16页
第16页 / 共26页
TCPIP实验报告.docx_第17页
第17页 / 共26页
TCPIP实验报告.docx_第18页
第18页 / 共26页
TCPIP实验报告.docx_第19页
第19页 / 共26页
TCPIP实验报告.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

TCPIP实验报告.docx

《TCPIP实验报告.docx》由会员分享,可在线阅读,更多相关《TCPIP实验报告.docx(26页珍藏版)》请在冰点文库上搜索。

TCPIP实验报告.docx

TCPIP实验报告

 

专业:

[通信工程]

学生姓名:

[张世超]

完成时间:

2018年9月22日

TCP/IP技术实验报告书

实验一网络应用程序基础

实验目的:

通过实验,使学生熟悉并掌握运用TCP/IP技术进行网络编程的基本知识,加深对课堂教学内容的理解,掌握套接字网络通信编程技术,能够运用VC++为开发工具编程解决网络通信中的实际问题,进行一些简单的网络应用程序设计。

实验内容:

1,Winsock的启动与终止。

2,Winsock的创建及绑定和关闭。

3,建立通信连接listen及accept和connect。

4,数据的传输。

5,简单的客户机/服务器之间的通信。

要求:

通过在SDK模式下完成数据通信的过程,掌握WindowsSocket的常用函数的形式和使用方法,理解数据通信的过程。

实验步骤:

1,打开VC环境

1,使用向导为客户端创建工程:

选择可执行程序,选择使用wsa环境,单文档环境,其他的选择默认设置

2,在文件中添加代码

3,编译调试

4,使用向导为服务器端创建工程:

选择可执行程序,选择使用wsa环境,单文档环境,其他的选择默认设置

5,在文件中添加代码

6,编译调试

7,分别打开两个系统命令窗口中,并分别在其中运行客户端和服务器端程序。

8,在客户端侧输入字符,可以看到服务器收到字符串

参考代码:

课本156页--160页

实验结果:

Client:

#include

#include

//服务器端口号为5050

#defineDEFAULT_PORT5050

#defineDATA_BUFFER1024

voidmain(intargc,char*argv[])

{

WSADATAwsaData;

SOCKETsClient;

intiPort=DEFAULT_PORT;

//从服务器端接收的数据长度

intiLen;

//接收数据的缓冲

charbuf[DATA_BUFFER];

//服务器端地址

structsockaddr_inser;

//判断输入的参数是否正确

if(argc<2)

{

//提示在命令行中输入服务器IP地址

printf("Usage:

client[serverIPaddress]\n");

return;

}

//接收数据的缓冲区初始化

memset(buf,0,sizeof(buf));

if(WSAStartup(MAKEWORD(2,2),&wsaData)!

=0)

{

printf("FailedtoloadWinsock.\n");

return;

}

//填写要连接的服务器地址信息

ser.sin_family=AF_INET;

ser.sin_port=htons(iPort);

//inet_addr()函数将命令行的点分IP地址转换为用二进制表示的网络字节顺序的IP地址

ser.sin_addr.s_addr=inet_addr(argv[1]);

//建立客户端流式套接口

sClient=socket(AF_INET,SOCK_STREAM,0);

if(sClient==INVALID_SOCKET)

{

printf("socket()Failed:

%d\n",WSAGetLastError());

return;

}

//请求与服务器端建立TCP连接

if(connect(sClient,(structsockaddr*)&ser,sizeof(ser))==INVALID_SOCKET)

{

printf("connect()Failed:

%d\n",WSAGetLastError());

return;

}

else

{

//从服务器端接收数据

iLen=recv(sClient,buf,sizeof(buf),0);

if(iLen==0)

return;

elseif(iLen==SOCKET_ERROR)

{

printf("recv()Failed:

%d",WSAGetLastError());

return;

}

printf("recv()datafromserver:

%s\n",buf);

}

closesocket(sClient);

WSACleanup();

}

Server:

#include

#include

#include

#pragmacomment(lib,"ws2_32.lib")

//服务器使用的端口号为5050

#defineDEFAULT_PORT5050

voidmain()

{

intiPort=DEFAULT_PORT;

WSADATAwsaData;

SOCKETsListen,

sAccept;

//客户端地址长度

intiLen;

//发送的数据长度

intiSend;

//要发送给客户端的信息

charbuf[]="Iamaserver.";

//服务器和客户端的IP地址

structsockaddr_inser,

cli;

printf("---------------------------\n");

printf("Serverwaiting\n");

printf("---------------------------\n");

if(WSAStartup(MAKEWORD(2,2),&wsaData)!

=0)

{

printf("FailedtoloadWinsock.\n");

return;

}

//创建服务器端套接口

sListen=socket(AF_INET,SOCK_STREAM,0);

if(sListen==INVALID_SOCKET)

{

printf("socket()Failed:

%d\n",WSAGetLastError());

return;

}

//以下建立服务器端地址

ser.sin_family=AF_INET;

//htons()函数把一个双字节的主机直接顺序的数据转换为网络直接顺序的数

ser.sin_port=htons(iPort);

//htonl()函数把一个四字节的主机直接顺序的数据转换为网络直接顺序的数

//使用系统制定的IP地址INADDR_ANY

ser.sin_addr.s_addr=htonl(INADDR_ANY);

if(bind(sListen,(LPSOCKADDR)&ser,sizeof(ser))==SOCKET_ERROR)

{

printf("bind()Failed:

%d\n",WSAGetLastError());

return;

}

//进入监听状态

if(listen(sListen,5)==SOCKET_ERROR)

{

printf("listen()Failed:

%d\n",WSAGetLastError());

return;

}

//初始化客户端地址长度参数

iLen=sizeof(cli);

//进入一个无限循环,等待客户的连接请求

while

(1)

{

sAccept=accept(sListen,(structsockaddr*)&cli,&iLen);

if(sAccept==INVALID_SOCKET)

{

printf("accept()Failed:

%d\n",WSAGetLastError());

break;

}

//输出客户IP地址和端口号

printf("AcceptedclientIP:

[%s],port:

[%d]\n",inet_ntoa(cli.sin_addr),ntohs(cli.sin_port));

//给建立连接的客户发送信息

iSend=send(sAccept,buf,sizeof(buf),0);

if(iSend==SOCKET_ERROR)

{

printf("send()Failed:

%d\n",WSAGetLastError());

break;

}

elseif(iSend==0)

break;

else

{

printf("send()byte:

%d\n",iSend);

printf("---------------------------\n");

}

closesocket(sAccept);

}

closesocket(sListen);

WSACleanup();

}

实验截图:

实验二基于TCP协议的客户/服务器通信程序

实验目的:

通过实验,使学生熟悉并掌握运用TCP/IP技术进行网络编程的基本知识,加深对课堂教学内容的理解,掌握套接字网络通信编程技术,能够运用VC++为开发工具编程解决网络通信中的实际问题,进行一些简单的网络应用程序设计。

实验内容:

1,主机间TCP的性能测试之一:

回程时延。

2,服务器端能从客户端接收数据并立即将接收到的数据原样返回给客户方。

3,客户端能往服务器端发送数据,然后立即接受从服务器端原样返回的数据。

理解TCP通信程序设计过程,并结合特定应用场景(如创建留言板程序、创建多客户端服务器/客户通信程序等)完成程序开发。

掌握TCP服务器程序和客户程序的创建过程,熟悉单播通信程序中用到的Winsock接口,培养学生将所学知识进行灵活运用的能力。

实验步骤:

1,打开VC环境

2,使用向导为客户端创建工程:

选择可执行程序,选择使用wsa环境,单文档环境,其他的选择默认设置

3,在文件中添加代码

4,编译调试

5,使用向导为服务器端创建工程:

选择可执行程序,选择使用wsa环境,单文档环境,其他的选择默认设置

6,在文件中添加代码

7,编译调试

8,分别打开两个系统命令窗口中,并分别在其中运行客户端和服务器端程序。

9,在客户端着输入字符,可以看到服务器收到字符串

注:

可以再实验一的代码上修改,自己增加额外的功能,比如取系统时间,计算往返时间等

作完之后,修改通信代码使用UDP来实现网络通信

实验结果:

Client:

#include

#include

#include

#defineDEFAULT_PORT5050

#defineDATA_BUFFER1024

#pragmacomment(lib,"WS2_32.lib")

voidmain(intargc,char*argv[])

{

WSADATAwsaData;

SOCKETsClient;

intiPort=5050;

intiLen;

intisend,iRecv;

charsend_buf[]="Hello!

Iamaclient";

charrecv_buf[DATA_BUFFER];

structsockaddr_inser;

if(argc<2)

{

printf("输入服务器的IP地址:

\n");

return;

}

else

memset(recv_buf,0,sizeof(recv_buf));

if(WSAStartup(MAKEWORD(2,2),&wsaData)!

=0)

{

printf("Winsock环境初始化失败:

\n");

return;

}

sClient=socket(AF_INET,SOCK_DGRAM,0);

if(sClient==INVALID_SOCKET)

{

printf("socket()函数调用失败:

%d\n",WSAGetLastError());

return;

}

ser.sin_family=AF_INET;

ser.sin_port=htons(iPort);

ser.sin_addr.s_addr=inet_addr(argv[1]);

iLen=sizeof(ser);

isend=sendto(sClient,send_buf,sizeof(send_buf),0,(structsockaddr*)&ser,iLen);

if(isend==SOCKET_ERROR)

{

printf("sendto()函数调用失败:

%d\n",WSAGetLastError());

return;

}

elseif(isend==0)

return;

else

printf("sendto()调用成功:

\n");

iRecv=recvfrom(sClient,recv_buf,sizeof(recv_buf),0,(structsockaddr*)&ser,&iLen);

if(iRecv==SOCKET_ERROR)

{

printf("recvfrom()函数调用失败:

%d\n",WSAGetLastError());

return;

}

elseif(iRecv==0)

return;

else

{

printf("sendto():

%s\n",recv_buf);

printf("-------------------------------\n");

}

closesocket(sClient);

WSACleanup();

}

Server:

#include

#include

#include

#defineDEFAULT_PORT5050

#defineBUFFER_LENGTH1024

#pragmacomment(lib,"WS2_32.lib")

voidmain()

{

intiPort=DEFAULT_PORT;

WSADATAwsaData;

SOCKETsSocket;

intiLen,iRecv,iSend;

structsockaddr_inser,cli;

charsend_buf[]="Hollo!

Iamaserver";

charrecv_buf[BUFFER_LENGTH];

printf("--------------------");

printf("Serverwaiting");

printf("--------------------");

if(WSAStartup(MAKEWORD(2,2),&wsaData)!

=0)

{

printf("环境初始化错误:

\n");

return;

}

sSocket=socket(AF_INET,SOCK_DGRAM,0);

if(sSocket==INVALID_SOCKET)

{

printf("socket()函数调用失败:

\n",WSAGetLastError());

return;

}

ser.sin_family=AF_INET;

ser.sin_port=htons(iPort);

ser.sin_addr.s_addr=htonl(INADDR_ANY);

if(bind(sSocket,(LPSOCKADDR)&ser,sizeof(ser))==SOCKET_ERROR)

{

printf("bind()函数调用失败:

\n",WSAGetLastError());

return;

}

iLen=sizeof(cli);

memset(recv_buf,0,sizeof(recv_buf));

while

(1)

{

iRecv=recvfrom(sSocket,recv_buf,BUFFER_LENGTH,0,(SOCKADDR*)&cli,&iLen);

if(iRecv==SOCKET_ERROR)

{

printf("recvfrom()函数调用失败:

\n",WSAGetLastError());

break;

}

elseif(iRecv==0)

break;

else

{

printf("recvfrom():

%d\n",recv_buf);

printf("客户端的IP地址、端口号:

%d\n",inet_ntoa(cli.sin_addr),ntohs(cli.sin_port));

}

iSend=sendto(sSocket,send_buf,sizeof(send_buf),0,(SOCKADDR*)&cli,sizeof(cli));

if(iSend==SOCKET_ERROR)

{

printf("sendto()函数调用失败:

\n",WSAGetLastError());

break;

}

elseif(iSend==0)

break;

else

{

printf("sendto():

调用成功!

\n");

}

}

closesocket(sSocket);

WSACleanup();

}

实验截图:

实验三简易聊天系统的实现

实验目的:

通过实验,使学生熟悉并掌握运用TCP/IP技术进行网络编程的基本知识,加深对课堂教学内容的理解,掌握套接字网络通信编程技术,能够运用VC++为开发工具编程解决网络通信中的实际问题,进行一些简单的网络应用程序设计。

实验内容:

设计实现包括客户端和服务器端的简单聊天系统。

通过编写简单的聊天程序,理解MFC的Socket类同SocketAPI之间的区别以及MFC的两种类之间的联系与区别。

实验步骤:

1,打开VC环境

2,使用向导为客户端创建工程:

选择FMC可执行程序,选择使用wsa环境,选择单文档环境,其他的选择默认设置

3,为对话窗添加控件:

右击工具栏选择控件,拖拽某个控件到对话框

4,为控件添加变量:

使用类向导,选择要操作的对话窗类,选择变量Tab,点击添加变量按钮,为变量命名并选择变量类型。

5,为控件添加代码:

右击控件添加事件,如点击,双击,右击。

为事件添加代码,根据教科书添加代码

6,添加新的对话窗:

单机rousourceTab,在对话窗出右击,选择添加对话窗,

7,为对话窗添加类:

右键点击新对话窗,选择添加类,出现向导,为类命名并选择父类

8,为心对话窗添加控件和变量

9,为新对话窗添加代码

10,编译调试

参考代码:

课本224页--229页

实验结果:

CsockClient:

#include"stdafx.h"

#include"CSockClient.h"

#include"CSockClientDlg.h"

#ifdef_DEBUG

#definenewDEBUG_NEW

#undefTHIS_FILE

staticcharTHIS_FILE[]=__FILE__;

#endif

/////////////////////////////////////////////////////////////////////////////

//CCSockClientApp

BEGIN_MESSAGE_MAP(CCSockClientApp,CWinApp)

//{{AFX_MSG_MAP(CCSockClientApp)

//NOTE-theClassWizardwilladdandremovemappingmacroshere.

//DONOTEDITwhatyouseeintheseblocksofgeneratedcode!

//}}AFX_MSG

ON_COMMAND(ID_HELP,CWinApp:

:

OnHelp)

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

//CCSockClientAppconstruction

CCSockClientApp:

:

CCSockClientApp()

{

//TODO:

addconstructioncodehere,

//PlaceallsignificantinitializationinInitInstance

}

/////////////////////////////////////////////////////////////////////////////

//TheoneandonlyCCSockClientAppobject

CCSockClientApptheApp;

/////////////////////////////////////////////////////////////////////////////

//CCSockClientAppinitialization

BOOLCCSockClientApp:

:

InitInstance()

{

if(!

AfxSocketInit())

{

AfxMessageBox(IDP_SOCKETS_INIT_FAILED);

returnFALSE;

}

AfxEnableControlContainer();

//Standardinitialization

//Ifyouarenotusingthesefeaturesandwishtoreducethesize

//ofyourfinalexecutable,youshouldremovefromthefollowing

//thespecificinitializationroutinesyoudonotneed.

#ifdef_AFXDLL

Enable3dControls();//CallthiswhenusingMFCinasharedDLL

#else

Enable3dControlsStatic();//CallthiswhenlinkingtoMFCstatically

#endif

CCSockClientDlgdlg;

m_pMainWnd=&dlg;

intnResponse=d

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

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2