资料传输协议简单与实现

上传人:876****10 文档编号:141782620 上传时间:2020-08-12 格式:DOC 页数:26 大小:100KB
返回 下载 相关 举报
资料传输协议简单与实现_第1页
第1页 / 共26页
资料传输协议简单与实现_第2页
第2页 / 共26页
资料传输协议简单与实现_第3页
第3页 / 共26页
资料传输协议简单与实现_第4页
第4页 / 共26页
资料传输协议简单与实现_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《资料传输协议简单与实现》由会员分享,可在线阅读,更多相关《资料传输协议简单与实现(26页珍藏版)》请在金锄头文库上搜索。

1、要求:用socket 编程接口编写两个程序,分别为客户程序(client.c)和服务器程序(server.c),该程序应能实现下述命令功能:get:取远方地一个文件put:传给远方一个文件pwd:显示远主当前目录dir:列出远方当前目录cd :改变远方当前目录?:显示你提供地命令quit :退出返回注意事项:这此命令地具体工作方式(指给出结果地形式)可以参照FTP 地相应命令,有余力地同学可以多实现几个命令.矚慫润厲钐瘗睞枥庑赖。使用Socket进行Client/Server程序设计地一般连接过程是这样地:Server端Listen(监听)某个端口是否有连接请求,Client端向Server端

2、发出Connect(连接)请求,Server端向Client端发回Accept(接受)消息.一个连接就建立起来了.Server端和Client端都可以通过Send,Write等方法与对方通信. 对于一个功能齐全地Socket,都要包含以下基本结构,其工作过程包含以下四个基本地步骤: (1) 创建Socket; (2) 打开连接到Socket地输入/出流; (3) 按照一定地协议对Socket进行读/写操作; (4) 关闭Socket. 下面是源代码:聞創沟燴鐺險爱氇谴净。/*client.c*/#include #include #include #pragma comment(lib,ws2

3、_32.lib)#define DEFAULT_PORT 2302#define DEFAULT_BUFFER 2048#define DEFAULT_MESSAGE This is a test of the emergency broadcasting system残骛楼諍锩瀨濟溆塹籟。charszServerip128, / Server to connect to酽锕极額閉镇桧猪訣锥。 szMessage1024; / Message to send to sever彈贸摄尔霁毙攬砖卤庑。int iPort = DEFAULT_PORT;/ Port on server to conn

4、ect to謀荞抟箧飆鐸怼类蒋薔。/DWORD dwCount = DEFAULT_COUNT; / Number of times to send message厦礴恳蹒骈時盡继價骚。BOOLbSendOnly = FALSE; / Send data only; dont receive茕桢广鳓鯡选块网羈泪。int dirfun();int getfun();int putfun();int pwdfun();int cdfun();int mdfun();int delfun();int usafun();void usage() printf(usage: client -p:x -s

5、:IP -n:x -onn);鹅娅尽損鹌惨歷茏鴛賴。 printf( -p:x Remote port to send ton);籟丛妈羥为贍偾蛏练淨。 printf( -s:IP Servers IP address or hostnamen);預頌圣鉉儐歲龈讶骅籴。 printf( -n:x Number of times to send messagen);渗釤呛俨匀谔鱉调硯錦。 printf( -o Send messages only; dont receiven);铙誅卧泻噦圣骋贶頂廡。 ExitProcess(1);void ValidateArgs(int argc, char

6、 *argv) int i; for(i = 1; i 3) iPort = atoi(&argvi3); break; case s: / Server if (strlen(argvi) 3) strcpy(szServerip, &argvi3); break; case n: / Number of times to send message if (strlen(argvi) 3) /dwCount = atol(&argvi3); break;case o: / Only send message; dont receive擁締凤袜备訊顎轮烂蔷。 bSendOnly = TRUE;

7、 break; default: usage(); break; int main(int argc, char *argv) WSADATA wsd; SOCKET sClient; char szBufferDEFAULT_BUFFER; int ret; /unsigned int i; /int j; struct sockaddr_in server; struct hostent *host = NULL; char choice5,choice240; / Parse the command line and load Winsock / argv1=-s:127.0.0.1;

8、strcpy(szServerip, &argv13); /ValidateArgs(argc, argv); if (WSAStartup(MAKEWORD(2,2), &wsd) != 0) printf(Failed to load Winsock library!n); return 1; /strcpy(szMessage, DEFAULT_MESSAGE); / / Create the socket, and attempt to connect to the server贓熱俣阃歲匱阊邺镓騷。 / sClient = socket(AF_INET, SOCK_STREAM, I

9、PPROTO_TCP);坛摶乡囂忏蒌鍥铃氈淚。 if (sClient = INVALID_SOCKET) printf(socket() failed: %dn, WSAGetLastError();蜡變黲癟報伥铉锚鈰赘。 return 1; server.sin_family = AF_INET; server.sin_port = htons(iPort); printf(server.sin_port=%un,server.sin_port); server.sin_addr.s_addr = inet_addr(szServerip);/ / If the supplied serv

10、er address wasnt in the form買鲷鴯譖昙膚遙闫撷凄。 / aaa.bbb.ccc.ddd its a hostname, so try to resolve it綾镝鯛駕櫬鹕踪韦辚糴。 / if (server.sin_addr.s_addr = INADDR_NONE) host = gethostbyname(szServerip); if (host = NULL) printf(Unable to resolve server: %sn, szServerip);驅踬髏彦浃绥譎饴憂锦。 return 1; CopyMemory(&server.sin_addr

11、, host-h_addr_list0, host-h_length); if (connect(sClient, (struct sockaddr *)&server, sizeof(server) = SOCKET_ERROR) printf(connect() failed: %dn, WSAGetLastError();猫虿驢绘燈鮒诛髅貺庑。 return 1; /显示接通信息 / / /for(j=0;j2;j+) / ret = recv(sClient, szBuffer, DEFAULT_BUFFER, 0); if (ret = 0) / Graceful close return 0; else if (ret = SOCKET_ERROR) printf(recv() failed: %dn

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号