网络程序设计实验代码.docx
《网络程序设计实验代码.docx》由会员分享,可在线阅读,更多相关《网络程序设计实验代码.docx(40页珍藏版)》请在冰豆网上搜索。
![网络程序设计实验代码.docx](https://file1.bdocx.com/fileroot1/2023-2/7/1da5bad9-d119-4d04-b01a-9795560f2dfd/1da5bad9-d119-4d04-b01a-9795560f2dfd1.gif)
网络程序设计实验代码
实验一:
UDP传输
Server端:
#pragmacomment(lib,"ws2_32.lib")
#include
#include
#defineMAX_BUF65536
intmain()
{
WSADatawsaData;
interr=WSAStartup(WINSOCK_VERSION,&wsaData);
if(0!
=err)
{
return-1;
}
/*socket()*/
SOCKETsock;
sock=socket(AF_INET,SOCK_DGRAM,0);
if(INVALID_SOCKET==sock)//出错处理
{
printf("scokt()Failed:
%d\n",WSAGetLastError());
WSACleanup();
return-1;
}
sockaddr_inLocalAddr;//定义变量
LocalAddr.sin_family=AF_INET;//指定网络类型
LocalAddr.sin_port=htons(20000);//绑定到20000端口,以后接收对端口发送到该端口上的数据
LocalAddr.sin_addr.s_addr=inet_addr("172.17.195.171");
err=bind(sock,(sockaddr*)&LocalAddr,sizeof(LocalAddr));
if(SOCKET_ERROR==err)
{
printf("bind()Failed:
%d\n",WSAGetLastError());
closesocket(sock);
WSACleanup();
return-1;
}
charrbuf[MAX_BUF];
memset(rbuf,0,MAX_BUF);
sockaddr_inRemoteAddr;//定义变量
intRemoteLen=sizeof(RemoteAddr);
intrByte=recvfrom(sock,rbuf,MAX_BUF,0,(sockaddr*)&RemoteAddr,&RemoteLen);
if(SOCKET_ERROR==rByte)
{
printf("recvfrom()Failed:
%d\n",WSAGetLastError());
closesocket(sock);
WSACleanup();
return-1;
}
printf("UDPrecv[%d]DATAfrom%s%s\n",rByte,inet_ntoa(RemoteAddr.sin_addr),rbuf);
//sockaddr_inRemoteAddr;
intsByte=sendto(sock,rbuf,strlen(rbuf),0,(sockaddr*)&RemoteAddr,sizeof(RemoteAddr));
if(SOCKET_ERROR==sByte)
{
printf("sendto()Failed:
%d\n",WSAGetLastError());
closesocket(sock);
WSACleanup();
return-1;
}
WSACleanup();
return0;
}
Client端:
#pragmacomment(lib,"ws2_32.lib")
#include
#include
#defineMAX_BUF65536
intmain()
{
WSADatawsaData;
interr=WSAStartup(WINSOCK_VERSION,&wsaData);
if(0!
=err)
{
return-1;
}
SOCKETsock;
sock=socket(AF_INET,SOCK_DGRAM,0);
if(INVALID_SOCKET==sock)//出错处理
{
printf("scokt()Failed:
%d\n",WSAGetLastError());
WSACleanup();
return-1;
}
printf("请输入信息!
");
chardata[20];
scanf("%s",data);
chardest_ip[]="172.17.195.171";
unsignedshortdest_port=20000;
sockaddr_inRemoteAddr;
RemoteAddr.sin_family=AF_INET;
RemoteAddr.sin_port=htons(dest_port);
RemoteAddr.sin_addr.s_addr=inet_addr(dest_ip);
intsByte=sendto(sock,data,strlen(data),0,(sockaddr*)&RemoteAddr,sizeof(RemoteAddr));
if(SOCKET_ERROR==sByte)
{
printf("sendto()Failed:
%d\n",WSAGetLastError());
closesocket(sock);
WSACleanup();
return-1;
}
charrbuf[MAX_BUF];
memset(rbuf,0,MAX_BUF);
//sockaddr_inRemoteAddr;//定义变量
intRemoteLen=sizeof(RemoteAddr);
intrByte=recvfrom(sock,rbuf,MAX_BUF,0,(sockaddr*)&RemoteAddr,&RemoteLen);
if(SOCKET_ERROR==rByte)
{
printf("recvfrom()Failed:
%d\n",WSAGetLastError());
closesocket(sock);
WSACleanup();
return-1;
}
printf("UDPrecv[%d]DATAfrom%s%s\n",rByte,inet_ntoa(RemoteAddr.sin_addr),rbuf);
WSACleanup();
return0;
}
实验二:
UDP文件传输
Server端:
#pragmacomment(lib,"ws2_32.lib")
#include
#include
#defineMAX_BUF65536
intmain()
{
WSADatawsaData;
interr=WSAStartup(WINSOCK_VERSION,&wsaData);
if(0!
=err)
{
return-1;
}
//socket()
SOCKETsock;
sock=socket(AF_INET,SOCK_DGRAM,0);
if(INVALID_SOCKET==sock)//出错处理
{
printf("scokt()Failed:
%d\n",WSAGetLastError());
WSACleanup();
return-1;
}
//绑定bind()
sockaddr_inLocalAddr;//定义变量
LocalAddr.sin_family=AF_INET;//指定网络类型
LocalAddr.sin_port=htons(20000);//绑定到20000端口,以后接收对端口发送到该端口上的数据
LocalAddr.sin_addr.s_addr=inet_addr("172.17.195.171");
err=bind(sock,(sockaddr*)&LocalAddr,sizeof(LocalAddr));
if(SOCKET_ERROR==err)
{
printf("bind()Failed:
%d\n",WSAGetLastError());
closesocket(sock);
WSACleanup();
return-1;
}
//接收
charrbuf[MAX_BUF];
memset(rbuf,0,MAX_BUF);
sockaddr_inRemoteAddr;//定义变量
intRemoteLen=sizeof(RemoteAddr);
intrByte=recvfrom(sock,rbuf,MAX_BUF,0,(sockaddr*)&RemoteAddr,&RemoteLen);
if(SOCKET_ERROR==rByte)
{
printf("recvfrom()Failed:
%d\n",WSAGetLastError());
closesocket(sock);
WSACleanup();
return-1;
}
printf("UDPrecv[%d]DATAfrom%s%s\n",rByte,inet_ntoa(RemoteAddr.sin_addr),rbuf);
printf("发送%s文件给%s\n",rbuf,inet_ntoa(RemoteAddr.sin_addr));
//file()
FILE*fp;
if((fp=fopen("e:
\\唐爱华\\hello.txt","r"))==NULL)
{
printf("Cannotopenthefile!
\n");
exit(0);
}
while(!
feof(fp))
{
memset(rbuf,0,MAX_BUF);
fread(&rbuf,sizeof(rbuf),1,fp);
//发送
intsByte=sendto(sock,rbuf,strlen(rbuf),0,(sockaddr*)&RemoteAddr,sizeof(RemoteAddr));
if(SOCKET_ERROR==sByte)
{
printf("sendto()Failed:
%d\n",WSAGetLastError());
closesocket(sock);
WSACleanup();
return-1;
}
}
fclose(fp);
closesocket(sock);
WSACleanup();
return0;
}
client端:
#pragmacomment(lib,"ws2_32.lib")
#include
#include
#defineMAX_BUF65536
intmain()
{
WSADatawsaData;
interr=WSAStartup(WINSOCK_VERSION,&wsaData);
if(0!
=err)
{
return-1;
}
SOCKETsock;
sock=socket(AF_INET,SOCK_DGRAM,0);
if(INVALID_SOCKET==sock)//出错处理
{
printf("scokt()Failed:
%d\n",WSAGetLastError());
WSACleanup();
return-1;
}
chardata[]=”hello”;
chardest_ip[]="172.17.195.171";
unsignedshortdest_port=20000;
sockaddr_inRemoteAddr;
RemoteAddr.sin_family=AF_INET;
RemoteAddr.sin_port=htons(dest_port);
RemoteAddr.sin_addr.s_addr=inet_addr(dest_ip);
intsByte=sendto(sock,data,strlen(data),0,(sockaddr*)&RemoteAddr,sizeof(RemoteAddr));
if(SOCKET_ERROR==sByte)
{
printf("sendto()Failed:
%d\n",WSAGetLastError());
closesocket(sock);
WSACleanup();
return-1;
}
charrbuf[MAX_BUF];
memset(rbuf,0,MAX_BUF);
intRemoteLen=sizeof(RemoteAddr);
FILE*fp;
if((fp=fopen("e:
\\唐爱华\\client.txt","w"))==NULL)
{
printf("Cannotopenthefile!
\n");
exit(0);
}
while(!
feof(fp))
{
intrByte=recvfrom(sock,rbuf,MAX_BUF,0,(sockaddr*)&RemoteAddr,&RemoteLen);
if(SOCKET_ERROR==rByte)
{
printf("recvfrom()Failed:
%d\n",WSAGetLastError());
closesocket(sock);
WSACleanup();
return-1;
}
//printf("UDPrecv[%d]DATAfrom%s%s\n",rByte,inet_ntoa(RemoteAddr.sin_addr),rbuf);
fwrite(&rbuf,sizeof(rbuf),1,fp);
}
fclose(fp);
closesocket(sock);
WSACleanup();
return0;
}
实验三:
TCP文件传输
Server端:
#pragmacomment(lib,"ws2_32.lib")
#include
#include
#include//formemset()
intmain()
{
WSADatawsaData;
interr=WSAStartup(WINSOCK_VERSION,&wsaData);
if(0!
=err)
{
return-1;
}
//socket()
SOCKETsock;
sock=socket(AF_INET,SOCK_STREAM,0);
if(INVALID_SOCKET==sock)//出错处理
{
printf("scoket()Failed:
%d\n",WSAGetLastError());
WSACleanup();
return-1;
}
//绑定bind()
sockaddr_inLocalAddr;//定义变量
LocalAddr.sin_family=AF_INET;//指定网络类型
LocalAddr.sin_port=htons(20000);//绑定到20000端口
LocalAddr.sin_addr.s_addr=htonl(INADDR_ANY);
err=bind(sock,(sockaddr*)&LocalAddr,sizeof(LocalAddr));
if(SOCKET_ERROR==err)
{
printf("bind()Failed:
%d\n",WSAGetLastError());
closesocket(sock);
WSACleanup();
return-1;
}
err=listen(sock,5);
if(SOCKET_ERROR==err)
{
printf("listen()Failed:
%d\n",WSAGetLastError());
closesocket(sock);
WSACleanup();
return-1;
}
sockaddr_inClientAddr;
intAddrLen=sizeof(ClientAddr);
FILE*fp;
while
(1)
{
SOCKETsockConnected=accept(sock,(sockaddr*)&ClientAddr,&AddrLen);
if(INVALID_SOCKET==sockConnected)//出错处理
{
printf("accpet()Failed:
%d\n",WSAGetLastError());
closesocket(sock);
WSACleanup();
return-1;
}
charrbuf[1024];
while
(1)
{
memset(rbuf,0,1024);
intrByte=recv(sockConnected,rbuf,1024,0);
if(SOCKET_ERROR==rByte)
{
printf("recv()Failed:
%d\n",WSAGetLastError());
closesocket(sock);
break;
}
if(0==rByte)//对方关闭连接
{
printf("Connectionisclosed.\n");
shutdown(sockConnected,SD_SEND);
closesocket(sockConnected);
break;
}
printf("TCPrecv[%d]DATA:
%s\n",rByte,rbuf);
//printf("Sendthefile'%s'to%s\n",rbuf,inet_ntoa(Dest_Addr.sin_addr));
if((fp=fopen("e:
\\唐爱华\\hello.txt","r"))==NULL)
{
printf("Cannotopenthefile!
\n");
exit(0);
}
memset(rbuf,0,1024);
fread(&rbuf,sizeof(rbuf),1,fp);
intsByte=send(sockConnected,rbuf,sizeof(rbuf),0);
if(SOCKET_ERROR==sByte)
{
printf("send()Failed:
%d\n",WSAGetLastError());
closesocket(sockConnected);
break;
}
fclose(fp);
}
}
closesocket(sock);
WSACleanup();
return0;
}
Client端:
#pragmacomment(lib,"ws2_32.lib")
#include
#include
#include//forstrlen()
#include//formemset()
intmain()
{
WSADatawsaData;
interr=WSAStartup(WINSOCK_VERSION,&wsaData);
if(0!
=err)
{
return-1;
}
SOCKETsock;
sock=socket(AF_INET,SOCK_STREAM,0);
if(INVALID_SOCKET==sock)//出错处理
{
printf("scoket()Failed:
%d\n",WSAGetLastError());
WSACleanup();
return-1;
}
sockaddr_inServerAddr;
ServerAddr.sin_family=AF_INET;
ServerAddr.sin_port=htons(20000);
ServerAddr.sin_addr.s_addr=inet_addr("172.17.195.171");
err=connect(sock,(sockaddr*)&ServerAddr,sizeof(ServerAddr));
if(SOCKET_ERROR==err)
{
printf("connect()Failed:
%d\n",WSAGetLastError());
closesocket(sock);
WSACleanup();
return-1;
}
chardata[]="hello";
printf("向服务器发送想要下载的文件:
hello\n");
intsByte=send(sock,data,strlen(data),0);
if(SOCKET_ERROR==sByte)
{
printf("send()Failed:
%d\n",WSAGetLastError());
closesocket(sock);
WSACleanup();
return-1;
}
shutdown(sock,SD_SEND);//closeconnect
FILE*fp;
fp=fopen("e:
\\唐爱华\\client.txt","w");
if(fp==NULL)
{
printf("Cannotopenthefile!
\n");
exit(0);
}
charrbuf[1024];
while
(1)
{
memset(rbuf,0,1024);
intrByte=recv(sock,rbuf,1024,0);
fwrite(&rbuf,sizeof(rbuf),1,fp);
if(SOCKET_ERROR==rByte)
{
printf("recv()Failed:
%d\n",WSAGetLas