资源描述:
《实验四 网络编程通信http》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、天津理工大学实验报告学院(系)名称:计算机与通信工程学院姓名刘琪琪学号20125871专业网络工程班级1班实验题目HTTP网络编程通信课程名称网络编程课程代码实验时间2015实验地点7-219批改意见成绩教师签字:实验HTTP网络编程通信一实验目的利用windowssocket编写B/S架构基于http的程序二实验环境搭载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(SOCKE
3、Ts,conststructsockaddrFAR*addr,intnamelen);参数解释:s:socket()函数返回的套接口描述字addr:指向Socket地址的指针namelen:该地址的长度3,监听函数listen(SOCKETs,intbacklog)参数解释:s:socket()函数返回的套接口描述字backlog:等待连接队列的最大长度4,接收连接函数accept(SOCKETs,structsockaddrFAR*addr,intFAR*addrlen)参数解释:s:socket()函数返回的
4、套接口描述字addr:(可选)指针,指向一缓冲区,其中接收为通讯层所知的连接实体的地址。addr参数的实际格式由套接口创建时所产生的地址族确定addrlen:(可选)指针,输入参数,配合addr一起使用,指向存有addr地址长度的整型数5,发送连接请求函数connect(SOCKETs,conststructcoskaddrFAR*name,intnamelen)s:socket()函数返回的套接口描述字name:想要进行连接的端口名namelen:名字长度服务器代码:#include#incl
5、ude#include#include#include#pragmacomment(lib,"ws2_32.lib")#definePORTNUMBER8888intmain(intargc,char*argv[]){char*respone="HTTP/1.1200OKrContent-Type:text/plainrContent-Length:13rr20115629";WORDversion;versi
6、on=MAKEWORD(1,1);//********单工传输WSADATAwsa;if(0!=WSAStartup(version,&wsa)){//初始化socket()printf("WSAStartuperror!");exit(0);}structsockaddr_inservaddr;structsockaddr_inclientaddr;intlistenfd;intclientfd;intport;intalen;charbuf[1000];memset(&servaddr,0,sizeof(
7、servaddr));//初始化servaddr为0servaddr.sin_family=AF_INET;//*****初始化地址簇servaddr.sin_addr.s_addr=INADDR_ANY;if(argc>1){//***同样是判断传入main()函数的参数,port=atoi(argv[1]);//***默认无参数下直接初始化端口号和服务器网络序列}else{port=PORTNUMBER;}if(port>0){servaddr.sin_port=htons((unsignedshort)po
8、rt);//****把端口转换成网络序列}else{fprintf(stderr,"badportnumber%d",argv[1]);exit(0);}listenfd=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);//**注册一个socketdescriptionDWORDerror=GetLastError();if(listen