socket网络编程 实验报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

大连民族学院计算机科学与工程学院实验报告实验题目:socket编程综合实验课程名称:网络编程技术实验类型:□演示性□验证性□操作性□设计性■综合性专业:软件工程班级:2010-2姓名:杨腾飞学号:2010082225实验日期:2013年5月13日实验地点:多媒体机房(1)实验学时:4实验成绩:指导教师签字:2013年5月28日一实验目的与要求实验目的:认真阅读课程代码,并在通信功能之上设计和实现一个简单的聊天程序。实验内容:练习使用socket编写客户/服务程序,掌握socket的使用方法,熟悉并掌握多线程的概念二总的设计思想及语言编程语言:C设计思想:让客户端与服务器建立链接即可通信,服务端建立套接字的大致步骤:1.建立socket。2。bind绑定特定的端口。3。listen监听特定的端口。4.accept,当有客户端连接服务器端口时,accept接收信息,并返回新的套接字描述符,提供给操作5.根据实际需求,write,read,send,recv等操作6.关闭套接字。客户端大致步骤:1.创建socket.2.根据服务器地址,connect连接到特定服务器。3.write,read等读写操作。4.关闭套接字。三源程序/****************************服务器端*********************/#includewinsock2.h#includestdio.h#includestring.hvoidmain(){WORDwVersionRequested;WSADATAwsaData;interr;wVersionRequested=MAKEWORD(1,1);err=WSAStartup(wVersionRequested,&wsaData);if(err!=0){return;}if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1){WSACleanup();return;}SOCKETsockSrv=socket(AF_INET,SOCK_STREAM,0);SOCKADDR_INaddrSrv;addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(6000);bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));listen(sockSrv,6);charsendBuf[100];charrecvBuf[100];chartempBuf[100];SOCKADDR_INaddrClient;intlen=sizeof(SOCKADDR);while(1){printf(waitingforclient\n);SOCKETsockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);recv(sockConn,tempBuf,100,0);if(tempBuf[0]!='q'){sprintf(recvBuf,%ssay:%s,inet_ntoa(addrClient.sin_addr),tempBuf);printf(%s\n,recvBuf);printf(pleaseinputyourdata,server:\n);gets(sendBuf);send(sockConn,sendBuf,strlen(sendBuf)+1,0);}else{printf(%srequesttoquitthechatplatform,inet_ntoa(addrClient.sin_addr));send(sockConn,q,strlen(q)+1,0);closesocket(sockConn);break;}}closesocket(sockSrv);WSACleanup();}/****************************客户端*********************/#includewinsock2.h#includestdio.h#includestring.h//#pragmacomment(lib,ws2_32.lib)voidmain(){WORDwVersionRequested;WSADATAwsaData;interr;wVersionRequested=MAKEWORD(1,1);err=WSAStartup(wVersionRequested,&wsaData);if(err!=0){return;}if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1){return;}while(1){SOCKETsockClient=socket(AF_INET,SOCK_STREAM,0);SOCKADDR_INaddrSrv;addrSrv.sin_addr.S_un.S_addr=inet_addr(127.0.0.1);addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(6000);charsendBuf[100];chartempBuf[100];charrecvBuf[100];intlen=sizeof(SOCKADDR);connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));printf(pleaseinputyourdata,client:\n);gets(sendBuf);printf(waitingforserver\n);send(sockClient,sendBuf,sizeof(sendBuf)+1,0);recv(sockClient,tempBuf,100,0);if(tempBuf[0]!='q'){sprintf(recvBuf,serversay:%s,tempBuf);printf(%s\n,recvBuf);}else{printf(theserverhasbeenclosed!\n);send(sockClient,q,strlen(q)+1,0);break;}}//closesocket(sockClient);WSACleanup();}四自我评价与总结此次实验是对Socket的一个应用,让我更深的了解了Socket函数的作用及使用方法。通过这次实验能够感受到网络在实际当中的运用,使我对网络编程有了更深的概念。同时让我发现自己知识结构的欠缺。虽然基本功能已经实现,但还是存在很多不稳定的问题尚待解决。实验过程中遇到了很多的问题,例如:程序只能通信一次。刚开始我以为建立的socket套接口只要建立一次并更新连接地址就可以多次使用。当初不知道问题存在的在于这,在程序加入很多错误报告代码,发现再客户端再次connect的时候返回负值。在网上查看很多相关代码之后,发现问题所在,把建立socket的代码写进客户端的循环体中,每次通信都重新建立socket套接口就可以了。

1 / 5
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功