资源描述:
《实验一 Windows下Socket编程实现简单通信》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、天津理工大学实验报告学院(系)名称:计算机与通信工程学院姓名刘琪琪学号20125871专业网络工程班级1班实验题目Windows下Socket编程实现简单通信课程名称网络编程课程代码实验时间2015实验地点7-219批改意见成绩教师签字:实验Windows下Socket编程实现简单通信一实验目的在windows环境下进行socket编程,实现两台主机间的简单通信。二实验环境搭载Windows7操作系统的PC机VC6.0编译器三实验内容1,服务器、客户端创建套接字2,客户端发送连接请求3,服务器收到请求后打印连接成功消息四实验报告要求1,有客户端和
2、服务器的完整代码2,实验结果截图3,Socket通信过程流程图五部分源代码及主要Socket函数参考1,注册套接字函数socket(intaf,inttype,intprotocol)参数解释:af:一个地址描述,目前只支持AF_INET格式,也就是说在本次实验中此参数直接写为AF_INET即可。type:指定socket类型,例如TCP类型(SOCK_STREAM)UDP类型(SOCK_DGRAM)protocol:套接口制订协议类型可以为0,。常用类型有IPPROTO_TCP、IPPROTO_UDP等2,绑定套接字函数bind(SOCKETs
3、,conststructsockaddrFAR*addr,intnamelen);参数解释:s:socket()函数返回的套接口描述字addr:指向Socket地址的指针namelen:该地址的长度3,监听函数listen(SOCKETs,intbacklog)参数解释:s:socket()函数返回的套接口描述字backlog:等待连接队列的最大长度4,接收连接函数accept(SOCKETs,structsockaddrFAR*addr,intFAR*addrlen)参数解释:s:socket()函数返回的套接口描述字addr:(可选)指针,指
4、向一缓冲区,其中接收为通讯层所知的连接实体的地址。addr参数的实际格式由套接口创建时所产生的地址族确定addrlen:(可选)指针,输入参数,配合addr一起使用,指向存有addr地址长度的整型数5,发送连接请求函数connect(SOCKETs,conststructcoskaddrFAR*name,intnamelen)s:socket()函数返回的套接口描述字name:想要进行连接的端口名namelen:名字长度客户端:#include#include#include#includ
5、e#definePORTNUMBER333#pragmacomment(lib,"ws2_32.lib")#defineQueueLen6intvisits=0;intmain(intargc,char*argv[]){WORDversion;version=MAKEWORD(1,1);WSADATAwsa;if(0!=WSAStartup(version,&wsa)){//初始化socket()printf("WSAStartuperror!");exit(0);}//structhostent*ptrh;struc
6、tsockaddr_inservaddr;structsockaddr_inclientaddr;intlistenfd;intclientfd;intport;intalen;charbuf[1000];memset(&servaddr,0,sizeof(servaddr));//初始化servaddr为0servaddr.sin_family=AF_INET;//主机地址标识的数据结构,使用TCP/IP协议servaddr.sin_addr.s_addr=INADDR_ANY;//32位的IP地址,网络字节顺序if(argc>1){port=
7、atoi(argv[1]);}else{port=PORTNUMBER;}if(port>0){servaddr.sin_port=htons((unsignedshort)port);//把端口转换成网络序}else{fprintf(stderr,"badportnumber%d",argv[1]);exit(0);}listenfd=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);//注册一个socketdescriptionDWORDerror=GetLastError();if(listenfd<0){f
8、printf(stderr,"socketcreateionfailed!");exit(0);}if(bind(listenfd,