socket网络通信编程实验报告Word文档格式.docx
- 文档编号:14825353
- 上传时间:2022-10-25
- 格式:DOCX
- 页数:14
- 大小:21.50KB
socket网络通信编程实验报告Word文档格式.docx
《socket网络通信编程实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《socket网络通信编程实验报告Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
之后,使用该程序双方能够实现简单信息的发送和接收。
实验步骤:
1.设计服务器端程序
打开c++6.0,新建一个c++文件,名为server.cpp,输入主要代码如下:
#include<
stdio.h>
winsock2.h>
stdlib.h>
#pragmacomment(lib,"
ws2_32.lib"
)
WSADATAwsd;
charSendBuffer[80],RecvBuffer[80];
//发送缓冲区及接收缓冲区
#defineDEFAULT_LSTN_PORT2416//本地默认监听端口
intn,bytes;
SOCKETh_NewSocket;
//accept函数产生的新socket
structsockaddr_inRemoteAddr;
charpath[80]="
"
;
charstrObject[100]="
intiSynError=1;
intsdirfun(SOCKETh_NewSocket);
intsgetfun(SOCKETh_NewSocket);
intsputfun(SOCKETh_NewSocket);
intspwdfun(SOCKETh_NewSocket);
intscdfun(SOCKETh_NewSocket);
intsmdfun(SOCKETh_NewSocket);
intsdelfun(SOCKETh_NewSocket);
/*main函数*/
intmain(intargc,char*argv[])
{structsockaddr_inSLocalAddr;
SOCKETh_Socket4Lstn;
//欲用作监听的socket
intaddr_in_len;
//地址长度
if(WSAStartup(MAKEWORD(2,2),&
wsd)!
=0)//初始化winsock
{WSACleanup();
printf("
WSAStartupfailed\n"
);
}
memset(&
SLocalAddr,0,sizeof(SLocalAddr));
h_Socket4Lstn=socket(PF_INET,SOCK_STREAM,0);
//创建socket
if(h_Socket4Lstn<
0)printf("
creatingsocketfailed\n"
SLocalAddr.sin_family=AF_INET;
if(argc==2)SLocalAddr.sin_port=htons((u_short)atoi(argv[1]));
elseSLocalAddr.sin_port=htons(DEFAULT_LSTN_PORT);
SLocalAddr.sin_addr.s_addr=INADDR_ANY;
if(bind(h_Socket4Lstn,(structsockaddr*)(&
SLocalAddr),sizeof(SLocalAddr))
<
0)
Bindfailed!
\n"
while
(1)
{listen(h_Socket4Lstn,3);
//启动监听
addr_in_len=sizeof(RemoteAddr);
//接受连接请求
h_NewSocket=accept(h_Socket4Lstn,(structsockaddr*)(&
RemoteAddr),&
addr_in_len);
if(h_NewSocket==INVALID_SOCKET)break;
//出错退出
%sisconnectedatport%d\n"
inet_ntoa(RemoteAddr.sin_addr),ntohs(SLocalAddr.sin_port));
sprintf(SendBuffer,"
200Welcome\r\n"
//向客户端发送欢迎消息
bytes=send(h_NewSocket,SendBuffer,strlen(SendBuffer),0);
530Login\r\n"
while
(1)
{//接收客户端的命令并调用命令处理函数
n=0;
iSynError=1;
{bytes=recv(h_NewSocket,&
RecvBuffer[n],1,0);
if((bytes<
0)||(bytes==0))break;
if(RecvBuffer[n]=='
$'
{RecvBuffer[n]='
\0'
break;
}
if(RecvBuffer[n]!
='
\r'
)n++;
0)||(bytes==0))
TheServerreceived:
'
%s'
cmdfromclient\n"
RecvBuffer);
//命令识别
if(strncmp(RecvBuffer,"
dir"
3)==0)sdirfun(h_NewSocket);
//查看当前目录
pwd"
3)==0)spwdfun(h_NewSocket);
//查询当前目录路径
if(strncmp(RecvBuffer,"
cd"
2)==0)scdfun(h_NewSocket);
//改变当前目录
get"
3)==0)sgetfun(h_NewSocket);
//文件下载
put"
3)==0)sputfun(h_NewSocket);
//文件上传
md"
2)==0)smdfun(h_NewSocket);
//新建文件夹
del"
3)==0)sdelfun(h_NewSocket);
//删除文件
quit"
4)==0)//退出命令
{printf("
quit\n"
sprintf(SendBuffer,"
221Byebye...\r\n"
bytes=send(h_NewSocket,SendBuffer,strlen(SendBuffer),0);
iSynError=0;
if(iSynError==1)//Syntaxerror
commandunrecognized,non-implemented!
500Syntaxerror.\n"
bytes=send(h_NewSocket,SendBuffer,
strlen(SendBuffer),0);
}}
closesocket(h_NewSocket);
%sdisconnectedfromport%d,controlsocketisclosed.\n"
inet_ntoa(RemoteAddr.sin_addr),ntohs(SLocalAddr.sin_port));
}
closesocket(h_Socket4Lstn);
//释放监听的socket
return0;
/*sdirfun用于处理来自客户端的目录查询命令*/
intsdirfun(SOCKETh_NewSocket)
{chartemp_buffer[80];
FILE*p_FiLeTemp;
//整理本地dir命令
strObject[0]='
strcat(strObject,"
dir"
strcat(strObject,path);
>
tmp.txt"
system(strObject);
//system函数执行shell命令
p_FiLeTemp=fopen("
"
r"
//打开执行结果文件,准备发送到客户端
125Transfering...\r\n"
while(fgets(temp_buffer,80,p_FiLeTemp)!
=NULL)//每次读取80字节发送
{sprintf(SendBuffer,"
%s"
temp_buffer);
//
send(h_NewSocket,SendBuffer,strlen(SendBuffer),0);
}
fclose(p_FiLeTemp);
//发送完毕,关闭结果临时文件
226Transfercompleted...\r\n"
system("
deltmp.txt"
//删除结果临时文件
226Closethedatasocket...\r\n"
dircommandhasbeendone!
\n"
/*sgetfun用于处理来自客户端的文件下载命令*/
intsgetfun(SOCKETh_NewSocket)
{inti=4,k=0;
charFileName[20],temp_buffer[80];
char*p_FileName=strObject;
FILE*fp;
requiredfileis:
"
//打印文件名到屏幕
while
(1)//提取文件名
RecvBuffer[i],1,0);
%c"
RecvBuffer[i]);
FileNa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- socket 网络 通信 编程 实验 报告