收藏 分销(赏)

tcp套接字编程.doc

上传人:xrp****65 文档编号:5973698 上传时间:2024-11-24 格式:DOC 页数:6 大小:45KB
下载 相关 举报
tcp套接字编程.doc_第1页
第1页 / 共6页
tcp套接字编程.doc_第2页
第2页 / 共6页
点击查看更多>>
资源描述
《网络编程技术》实验报告 得分: 班级 姓名 学号 实验名称 实验二 TCP套接字编程 实验室号 实验目的 掌握单用户客户端跟服务器的连接和数据交互及处理。 实验要求 1. 认真阅读和掌握本实验的相关知识点。 2.上机编写并运行本程序。 3.保存程序的运行结果,并结合程序进行分析。 实验内容 实现一个基于TCP协议的服务器-客户端程序,要求完成以下功能。 客户端: 从命令行读入服务器的IP地址;并连接到服务器; 循环从命令行读入一行字符串,并传递给服务器,由服务器对字符串反转,并将结果返回客户程序,如果用户输入的是quit,则关闭连接; 客户程序显示反转后的字符串; 服务器端: 循环接收客户的连接请求,并显示客户的IP地址和端口号; 接收客户传来的字符串,反转后传递给客户; 实验步骤或源代码 服务器端: #include<sys/socket.h> #include<strings.h> #include<stdio.h> #include<netinet/in.h> #include<string.h> #include<unistd.h> #include<netdb.h> #include<sys/types.h> #include<arpa/inet.h> #include<stdlib.h> #define MAXDATASIZE 100 #define PORT 2345 int main() { int sockfd, connfd; struct sockaddr_in server, server; struct sockaddr_in client; socklen_t len; char buf[MAXDATASIZE]; char sendbuf[MAXDATASIZE]; int i, num,j; int opt=SO_REUSEADDR; if((sockfd = socket(AF_INET, SOCK_STREAM, 0))==-1) { perror("socket() error\n"); 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() error\n""); exit(1); } if(listen(sockfd,20)==-1) { perror("listen() error\n""); exit(1); } while (1) { len = sizeof(client); if((connfd = accept(sockfd, (struct sockaddr *)&client, & len))==-1) { perror("accept() error\n""); exit(1); } printf("client IP is %s ,PORT is %d\n", 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;j<n;j++) sendbuf[n-j-2]=buf[j]; send(connfd, sendbuf, n,0); if (!strcmp(buf,”quit”)) break; } close(connfd) } close(sockfd); } 客户端源代码如下: #include <stdio.h> #include <string.h> #include <errno.h> #include <unistd.h> #include <netinet/in.h> #include <netdb.h> #include <sys/types.h> #include <netinet/in.h> #include <sys/socket.h> #include <stdlib.h> #define MAXDATASIZE 100 #define PORT 2345 int main(int argc, char *argv[]) { struct sockaddr_in server; char buf[MAXDATASIZE]; int sockfd, num; struct hostent *he; if (argc != 2) { printf(“you must input like this:%s <IP >”,argv[0]): exit(1); } if ((he=gethostbyname(argv[1])) == 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 :%s\n" ,buf); } close(sockfd); } 实验结论、心得体会 1.在写客户端时,将清零函数bzero()置于给服务器赋值之前,导致连接出错。 经过仔细检查发现问题所在。 2.写服务器端时,将客户端地址长度len本为 socklen_t定义为Int型,出错。 心得: 虽然书上都有代码,但是还需要自己做适当的调整,变为自己的东西,而且实验时应该细心,否则一点易被忽视的小错误都可能导致整个实验的失败。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服