📄 zzj_cli.c
字号:
/*inet.h*/#ifndef __INET_H__ #define __INET_H__ #include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netdb.h>#include <netinet/in.h> #include <arpa/inet.h> #include <fcntl.h> #include <sys/time.h> #include <unistd.h> #include <sys/time.h> #define MAX_CLIENT 10 #define READ 0 #define WRITE 1 #define MAX_LINE 1000 #define MAX_NAME 100#define SETNAME "/name" #define __SELECT__ #endif //#include "inet.h" #include <signal.h> #include <ctype.h> extern int init_cli(); void add_set(fd_set *sockset, int sockfd) { FD_ZERO(sockset); FD_SET(sockfd, sockset); FD_SET(0, sockset); } int main(int argc, char** argv) { int sockfd; int status; char str[MAX_LINE]; char name[MAX_NAME]; fd_set sockset; sockfd = init_cli(argv[1], argv[2]); if(sockfd == 0) { printf("Init client socket error.\n"); fflush(stdout); exit(1); } add_set(&sockset, sockfd); fprintf(stdout, "Please input your name:"); fscanf(stdin, "%s", name); strcpy(str, "/"); strcat(str, name); write(sockfd, str, strlen(str)); while(1) { select(sockfd+1, &sockset, NULL, NULL, NULL); if(FD_ISSET(sockfd, &sockset)) { status = read(sockfd, str, MAX_LINE); if(status == 0) exit(0); str[status] = '\0'; printf("%s", str); fflush(stdout); } if(FD_ISSET(0, &sockset)) { status = read( 0, str, MAX_LINE); str[status] = '\0'; if(str[0] == 'q') { sprintf(str, "%s leave the room.\n", name); write(sockfd, str, strlen(str)); close(sockfd); exit(0); } if(write(sockfd, str, strlen(str)) != strlen(str)) { printf("Write error\n"); exit(0); } } add_set(&sockset, sockfd); } return 1; } int init_cli(const char *host, const char *port) //Return sockfd if successful, else 0 { int sockfd; int SERV_TCP_PORT = 2008; struct sockaddr_in6 serv_addr; bzero((char*)&serv_addr, sizeof(serv_addr)); serv_addr.sin6_family = AF_INET6; inet_pton(AF_INET6, host, &serv_addr.sin6_addr); serv_addr.sin6_port = htons(SERV_TCP_PORT); if((sockfd = socket(AF_INET6, SOCK_STREAM, 0)) < 0) { printf("client:can`t open stream socker.\n"); fflush(stdout); exit(1); } if(connect(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) { printf("client:can`t connect to server\n"); fflush( stdout); exit(1); } return sockfd; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -