计算机网络实验二.docx

上传人:b****4 文档编号:26992988 上传时间:2023-06-24 格式:DOCX 页数:23 大小:135.61KB
下载 相关 举报
计算机网络实验二.docx_第1页
第1页 / 共23页
计算机网络实验二.docx_第2页
第2页 / 共23页
计算机网络实验二.docx_第3页
第3页 / 共23页
计算机网络实验二.docx_第4页
第4页 / 共23页
计算机网络实验二.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

计算机网络实验二.docx

《计算机网络实验二.docx》由会员分享,可在线阅读,更多相关《计算机网络实验二.docx(23页珍藏版)》请在冰豆网上搜索。

计算机网络实验二.docx

计算机网络实验二

实验报告

学院(系)名称:

计算机与通信工程学院

姓名

Sky

学号

专业

计算机科学与技术

班级

2班

实验名称

基于TCP/UDP的Socket编程

课程名称

计算机网络

课程代码

0662016

实验时间

2016年4月18日14:

00-15:

40

实验地点

7-219

批改意见

成绩

教师签字:

1.实验目的

了解套接字(socket)实现原理。

通过编成理解TCP、UDP原理,加深对传输层的功能理解

2.实验环境

VC++6.0

3.实验过程记录(源程序、测试用例、测试结果及心得体会等)

传送字符串:

Clinet端源码:

#defineWIN32_LEAN_AND_MEAN

#include

#include

#include

#include

#pragmacomment(lib,"ws2_32.lib")

#defineDEFAULT_PORT2007

#defineDEFAULT_PROTOSOCK_STREAM

voidUsage(char*progname)

{

fprintf(stderr,"Usage:

%s-p[protocol]-n[servername/IP]-e[port_num]-l[iterations]\n",progname);

fprintf(stderr,"Where:

\n\tprotocolisoneofTCPorUDP\n");

fprintf(stderr,"\t-serveristheIPaddressornameofserver\n");

fprintf(stderr,"\t-port_numistheporttolistenon\n");

fprintf(stderr,"\t-iterationsisthenumberofloopstoexecute.\n");

fprintf(stderr,"\t-(-lbyitselfmakesclientruninaninfiniteloop,\n");

fprintf(stderr,"\t-HitCtrl-Ctoterminateit)\n");

fprintf(stderr,"\t-ThedefaultsareTCP,localhostand2007\n");

WSACleanup();

exit

(1);

}

intmain(intargc,char**argv)

{

charBuffer[128];

char*server_name="localhost";

unsignedshortport=DEFAULT_PORT;

intretval,loopflag=0;

inti,loopcount,maxloop=-1;

unsignedintaddr;

intsocket_type=DEFAULT_PROTO;

structsockaddr_inserver;

structhostent*hp;

WSADATAwsaData;

SOCKETconn_socket;

if(argc>1)

{

for(i=1;i

{

if((argv[i][0]=='-')||(argv[i][0]=='/'))

{

switch(tolower(argv[i][1]))

{

case'p':

if(!

stricmp(argv[i+1],"TCP"))

socket_type=SOCK_STREAM;

elseif(!

stricmp(argv[i+1],"UDP"))

socket_type=SOCK_DGRAM;

else

Usage(argv[0]);

i++;

break;

case'n':

server_name=argv[++i];

break;

case'e':

port=atoi(argv[++i]);

break;

case'l':

loopflag=1;

if(argv[i+1]){

if(argv[i+1][0]!

='-')

maxloop=atoi(argv[i+1]);

}

else

maxloop=-1;

i++;

break;

default:

Usage(argv[0]);

break;

}

}

else

Usage(argv[0]);

}

}

if((retval=WSAStartup(0x202,&wsaData))!

=0)

{

fprintf(stderr,"Client:

WSAStartup()failedwitherror%d\n",retval);

WSACleanup();

return-1;

}

else

printf("Client:

WSAStartup()isOK.\n");

if(port==0)

{

Usage(argv[0]);

}

if(isalpha(server_name[0]))

{//serveraddressisaname

hp=gethostbyname(server_name);

}

else

{//Convertnnn.nnnaddresstoausableone

addr=inet_addr(server_name);

hp=gethostbyaddr((char*)&addr,4,AF_INET);

}

if(hp==NULL)

{

fprintf(stderr,"Client:

Cannotresolveaddress\"%s\":

Error%d\n",server_name,WSAGetLastError());

WSACleanup();

exit

(1);

}

else

printf("Client:

gethostbyaddr()isOK.\n");

//Copytheresolvedinformationintothesockaddr_instructure

memset(&server,0,sizeof(server));

memcpy(&(server.sin_addr),hp->h_addr,hp->h_length);

server.sin_family=hp->h_addrtype;

server.sin_port=htons(port);

conn_socket=socket(AF_INET,socket_type,0);/*Openasocket*/

if(conn_socket<0)

{

fprintf(stderr,"Client:

ErrorOpeningsocket:

Error%d\n",WSAGetLastError());

WSACleanup();

return-1;

}

else

printf("Client:

socket()isOK.\n");

printf("Client:

Clientconnectingto:

%s.\n",hp->h_name);

if(connect(conn_socket,(structsockaddr*)&server,sizeof(server))==SOCKET_ERROR)

{

fprintf(stderr,"Client:

connect()failed:

%d\n",WSAGetLastError());

WSACleanup();

return-1;

}

else

printf("Client:

connect()isOK.\n");

//Testsendingsomestring

loopcount=0;

while

(1)

{

wsprintf(Buffer,"Thisisatestmessagefromclient#%d",loopcount++);

retval=send(conn_socket,Buffer,sizeof(Buffer),0);

if(retval==SOCKET_ERROR)

{

fprintf(stderr,"Client:

send()failed:

error%d.\n",WSAGetLastError());

WSACleanup();

return-1;

}

else

printf("Client:

send()isOK.\n");

printf("Client:

Sentdata\"%s\"\n",Buffer);

retval=recv(conn_socket,Buffer,sizeof(Buffer),0);

if(retval==SOCKET_ERROR)

{

fprintf(stderr,"Client:

recv()failed:

error%d.\n",WSAGetLastError());

closesocket(conn_socket);

WSACleanup();

return-1;

}

else

printf("Client:

recv()isOK.\n");

//WearenotlikelytoseethiswithUDP,sincethereisno

//'connection'established.

if(retval==0)

{

printf("Client:

Serverclosedconnection.\n");

closesocket(conn_socket);

WSACleanup();

return-1;

}

printf("Client:

Received%dbytes,data\"%s\"fromserver.\n",retval,Buffer);

if(!

loopflag)

{

printf("Client:

Terminatingconnection...\n");

break;

}

else

{

if((loopcount>=maxloop)&&(maxloop>0))

break;

}

}

closesocket(conn_socket);

WSACleanup();

return0;

}

Server端源码:

#defineWIN32_LEAN_AND_MEAN

#include

#include

#include

#include

#pragmacomment(lib,"ws2_32.lib")

 

#defineDEFAULT_PORT2007

//defaultTCPsockettype

#defineDEFAULT_PROTOSOCK_STREAM

voidUsage(char*progname)

{

fprintf(stderr,"Usage:

%s-p[protocol]-e[port_num]-i[ip_address]\n",progname);

fprintf(stderr,"Where:

\n\t-protocolisoneofTCPorUDP\n");

fprintf(stderr,"\t-port_numistheporttolistenon\n");

fprintf(stderr,"\t-ip_addressistheipaddress(indotted\n");

fprintf(stderr,"\tdecimalnotation)tobindto.Butitisnotusefulhere...\n");

fprintf(stderr,"\t-HitCtrl-Ctoterminateserverprogram...\n");

fprintf(stderr,"\t-ThedefaultsareTCP,2007andINADDR_ANY.\n");

WSACleanup();

exit

(1);

}

intmain(intargc,char**argv)

{

charBuffer[128];

char*ip_address=NULL;

unsignedshortport=DEFAULT_PORT;

intretval;

intfromlen;

inti;

intsocket_type=DEFAULT_PROTO;

structsockaddr_inlocal,from;

WSADATAwsaData;

SOCKETlisten_socket,msgsock;

/*Parsearguments,ifthereareargumentssupplied*/

if(argc>1)

{

for(i=1;i

{

//switchesoroptions...

if((argv[i][0]=='-')||(argv[i][0]=='/'))

{

//Changetolower...ifany

switch(tolower(argv[i][1]))

{

//if-por/p

case'p':

if(!

stricmp(argv[i+1],"TCP"))

socket_type=SOCK_STREAM;

elseif(!

stricmp(argv[i+1],"UDP"))

socket_type=SOCK_DGRAM;

else

Usage(argv[0]);

i++;

break;

//if-ior/i,forserveritisnotsouseful...

case'i':

ip_address=argv[++i];

break;

//if-eor/e

case'e':

port=atoi(argv[++i]);

break;

//Nomatch...

default:

Usage(argv[0]);

break;

}

}

else

Usage(argv[0]);

}

}

//RequestWinsockversion2.2

if((retval=WSAStartup(0x202,&wsaData))!

=0)

{

fprintf(stderr,"Server:

WSAStartup()failedwitherror%d\n",retval);

WSACleanup();

return-1;

}

else

printf("Server:

WSAStartup()isOK.\n");

if(port==0)

{

Usage(argv[0]);

}

local.sin_family=AF_INET;

local.sin_addr.s_addr=(!

ip_address)?

INADDR_ANY:

inet_addr(ip_address);

/*PortMUSTbeinNetworkByteOrder*/

local.sin_port=htons(port);

//TCPsocket

listen_socket=socket(AF_INET,socket_type,0);

if(listen_socket==INVALID_SOCKET){

fprintf(stderr,"Server:

socket()failedwitherror%d\n",WSAGetLastError());

WSACleanup();

return-1;

}

else

printf("Server:

socket()isOK.\n");

//bind()associatesalocaladdressandportcombinationwiththesocketjustcreated.

//Thisismostusefulwhentheapplicationisa

//serverthathasawell-knownportthatclientsknowaboutinadvance.

if(bind(listen_socket,(structsockaddr*)&local,sizeof(local))==SOCKET_ERROR)

{

fprintf(stderr,"Server:

bind()failedwitherror%d\n",WSAGetLastError());

WSACleanup();

return-1;

}

else

printf("Server:

bind()isOK.\n");

//Sofar,everythingwedidwasapplicabletoTCPaswellasUDP.

//However,therearecertainstepsthatdonotworkwhentheserveris

//usingUDP.Wecannotlisten()onaUDPsocket.

if(socket_type!

=SOCK_DGRAM)

{

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

{

fprintf(stderr,"Server:

listen()failedwitherror%d\n",WSAGetLastError());

WSACleanup();

return-1;

}

else

printf("Server:

listen()isOK.\n");

}

printf("Server:

%s:

I'mlisteningandwaitingconnection\nonport%d,protocol%s\n",argv[0],port,(socket_type==SOCK_STREAM)?

"TCP":

"UDP");

while

(1)

{

fromlen=sizeof(from);

//accept()doesn'tmakesenseonUDP,sincewedonotlisten()

if(socket_type!

=SOCK_DGRAM)

{

msgsock=accept(listen_socket,(structsockaddr*)&from,&fromlen);

if(msgsock==INVALID_SOCKET)

{

fprintf(stderr,"Server:

accept()error%d\n",WSAGetLastError());

WSACleanup();

return-1;

}

else

printf("Server:

accept()isOK.\n");

printf("Server:

acceptedconnectionfrom%s,port%d\n",inet_ntoa(from.sin_addr),htons(from.sin_port));

}

else

msgsock=listen_socket;

//InthecaseofSOCK_STREAM,theservercandorecv()andsend()on

//theacceptedsocketandthencloseit.

//However,forSOCK_DGRAM(UDP),theserverwilldorecvfrom()andsendto()inaloop.

if(socket_type!

=SOCK_DGRAM)

retval=recv(msgsock,Buffer,sizeof(Buffer),0);

else

{

retval=recvfrom(msgsock,Buffer,sizeof(Buffer),0,(structsockaddr*)&from,&fromlen);

printf("Server:

Receiveddatagramfrom%s\n",inet_ntoa(from.sin_addr));

}

if(retval==SOCKET_ERROR)

{

fprintf(stderr,"Server:

recv()failed:

error%d\n",WSAGetLastError());

closesocket(msgsock);

continue;

}

else

printf("Server:

recv()isOK.\n");

if(retval==0)

{

printf("Server:

Clientclosedconnection.\n");

closesocket(msgsock);

continue;

}

printf("Server:

Received%dbytes,data\"%s\"fromclient\n",retval,Buffer);

printf("Server:

Echoingthesamedatabacktoclient...\n");

if(socket_type!

=SOCK_DGRAM)

retval=send(msgsock,Buffer,

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

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1