⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zzj_cli.c

📁 linux环境下多人聊天程序。包括服务器端和客户端程序
💻 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 + -