
作业社区
探索学习新天地,共享知识资源!
邓文兵 的学生作业:
//Tcp服务端,使用方式 ./server ip port void TCP_SERVER(int argc, char *argv[]) { //定义的两个文件描述符,前者专门用于监听客户端的连接请求,后者用来成功建立连接以后与客户端进行的通信 int sockfd,new_fd; int ret; //定义服务端端收发数据字节数 ssize_t sbytes,rbytes; //定义收发数据缓冲区 char buffer[1024]; memset(&buffer,0,sizeof(buffer)); //服务器配置结构体,客户端配置结构体 sockaddr_in server_addr,client_addr; //参数判断 if(argc!=3) { //提示正确用法 printf("Usage: %s \n", argv[0]); exit(EXIT_FAILURE); } //创建套接字,传入TCP格式的,获取文件fd用于给客户端收发消息 sockfd=socket(AF_INET, SOCK_STREAM, 0); //判断是否创建套接字成功 if(sockfd==-1) { perror("socket create failed"); exit(EXIT_FAILURE); } //创建成功,开始绑定服务器的ip地址与port端口号 socklen_t len = sizeof(server_addr); //设置协议族,设置端口号、网址 server_addr.sin_family=AF_INET; server_addr.sin_port=htons(atoi(argv[2])); server_addr.sin_addr.s_addr=inet_addr(argv[1]); //服务器将套接字文件描述符与服务器配置结构体进行一个绑定 ret=bind(sockfd,(struct sockaddr*)&server_addr,len); //处理绑定异常 if(ret==-1) { perror("[ERROR] bind failed"); close(sockfd); exit(EXIT_FAILURE); } //套接字绑定好以后,开始使用listen接口监听,listen内部会做两件事 //1.将套接字文件描述符设置为监听状态。2.建立监听队列用于监听来自客户端的连接请求,主要是设置监听队列的最大长度,当超出最大长度时,说明过多的客户端请求连接 //后续的更多的客户端请求连接,将会遭到服务器的拒绝(监听队列时用来缓存客户端的连接请求) ret=listen(sockfd,BACKLOG); if(ret==-1) { perror("[ERROR] listen failed"); close(sockfd); exit(EXIT_FAILURE); } //准备工作做好,可以开始尝试处理客户端的连接通信请求 //传入监听文件描述符,客户端配置信息结构体,结构体的长度,获取到一个新的专门用于与客户端进行通信收发的文件描述符 new_fd=accept(sockfd,(struct sockaddr*)&client_addr,&len); if(new_fd==-1) { perror("[ERROR] connection failed"); //退出以前需要关闭套接字资源 close(sockfd); exit(EXIT_FAILURE); } //为了验证连接建立成功,可以尝试打印获取到的客户端的配置信息,打印时,将网络字节序转换为本地ip地址与端口号 std::cout





wgf1209 的学生作业:
//标准的命名空间 using namespace std; class String { public: String(const char *str = NULL); //有参构造函数 String(const String &obj);//拷贝构造 ~String(); //析构函数 void show(); //显示函数 //友元成员函数实现 +号运算符重载 friend String operator+(const String &s1, const String &s2); //成员函数实现 +号运算符重载 String operator+(const String &op2); //b = ++a => a = a + 1, b = a String &operator++(); //前置运算符重载 //b = a ++ => b = a, a =a + 1 String operator++(int); //后置运算符重载 // 重载 [] 运算符,支持下标访问 char &operator[](int index); // 重载 const 版本的 [] 运算符,用于 const 对象 const char &operator[](int index) const; // 返回字符串长度 int size() const { return length; } protected: char *str; int length; // 添加一个成员变量来存储字符串的长度 }; String::String(const char *str) { cout str, str); } else { this->str = NULL; } } String::String(const String &obj) { cout str, obj.str); } else { //浅度拷贝 this->str = NULL; } } void String::show() { //str++; //error:不能修改成员变量的值 for (char *p = str; p && *p; p++) { cout




