资源预览内容
第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
亲,该文档总共6页全部预览完了,如果喜欢就下载吧!
资源描述
网络编程技术实验报告得分: 班级姓名学号实验名称实验二 TCP套接字编程实验室号实验目的掌握单用户客户端跟服务器的连接和数据交互及处理。实验要求1.认真阅读和掌握本实验的相关知识点。2上机编写并运行本程序。3保存程序的运行结果,并结合程序进行分析。实验内容实现一个基于TCP协议的服务器-客户端程序,要求完成以下功能。客户端:从命令行读入服务器的IP地址;并连接到服务器;循环从命令行读入一行字符串,并传递给服务器,由服务器对字符串反转,并将结果返回客户程序,如果用户输入的是quit,则关闭连接;客户程序显示反转后的字符串;服务器端:循环接收客户的连接请求,并显示客户的IP地址和端口号;接收客户传来的字符串,反转后传递给客户;实验步骤或源代码服务器端:#include#include#include#include#include#include#include#include#include#include#define MAXDATASIZE 100#define PORT 2345int main()int sockfd, connfd; struct sockaddr_in server, server; struct sockaddr_in client; socklen_t len; char bufMAXDATASIZE; char sendbufMAXDATASIZE; int i, num,j;int opt=SO_REUSEADDR; if(sockfd = socket(AF_INET, SOCK_STREAM, 0)=-1)perror(socket() errorn);exit(1); setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt); bzero(&server, sizeof(server); server.sin_family = AF_INET; server.sin_addr.s_addr = htonl(INADDR_ANY); server.sin_port = htons(PORT); if(bind(sockfd, (struct sockaddr *)&server, sizeof(server)=-1) perror(bind() errorn); exit(1); if(listen(sockfd,20)=-1) perror(listen() errorn); exit(1); while (1) len = sizeof(client); if(connfd = accept(sockfd, (struct sockaddr *)&client, & len)=-1) perror(accept() errorn);exit(1);printf(client IP is %s ,PORT is %dn, inet_ntoa(client.sin_addr), ntohs(client.sin_port); while (1) If(num=recv(connfd, buf, MAXDATASIZE,0)=-1); Perror(“recv() error!n”); Exit(1); printf(recive buf is %s,buf); for(j=0;jn;j+) sendbufn-j-2=bufj; send(connfd, sendbuf, n,0);if (!strcmp(buf,”quit”) break; close(connfd) close(sockfd);客户端源代码如下:#include #include #include #include #include #include #include #include #include #include #define MAXDATASIZE 100#define PORT 2345int main(int argc, char *argv) struct sockaddr_in server; char bufMAXDATASIZE; int sockfd, num;struct hostent *he; if (argc != 2) printf(“you must input like this:%s ”,argv0): exit(1); if (he=gethostbyname(argv1) = NULL) Perror(“gethostbyname() error!n”); exit(1); if(sockfd = socket(AF_INET, SOCK_STREAM, 0)=-1) Perror(“socket() error!n”); exit(1); bzero(&server, sizeof(server); server.sin_family = AF_INET; server.sin_addr = *(struct in_addr *)he-h_addr); server.sin_port = htons(PORT); if(connect(sockfd, (struct sockaddr *)&server, sizeof(server)=-1) Perror(“connect() error!n”); exit(1); while (fgets(buf, MAXDATASIZE, stdin) != NULL) send(sockfd, buf, strlen(buf),0); if(num=recv(sockfd, buf, MAXDATASIZE,0)=-1) Perror(“recv() error!n”); break; else printf(recv buf is :%sn ,buf); close(sockfd);实验结论、心得体会1.在写客户端时,将清零函数bzero()置于给服务器赋值之前,导致连接出错。经过仔细检查发现问题所在。2.写服务器端时,将客户端地址长度len本为 socklen_t定义为Int型,出错。心得:虽然书上都有代码,但是还需要自己做适当的调整,变为自己的东西,而且实验时应该细心,否则一点易被忽视的小错误都可能导致整个实验的失败。
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号