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

📄 client.c

📁 提供了非阻塞的客户端和服务器端通信的实例程序。用linux下的C语言实现。
💻 C
字号:
#include <stdio.h>#include <string.h>#include <errno.h>#include <sys/socket.h>#include <resolv.h>#include <stdlib.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>#include <sys/time.h>#include <sys/types.h>#define MAXBUF 1024int main(int argc, char **argv){    	int sockfd, len;    	struct sockaddr_in dest;    	char buf[MAXBUF + 1];    	fd_set rfds;    	struct timeval tv;	int retval, maxfd = -1;	if (argc != 3) {        	printf("Usage: %s IP Port",argv[0]);        	exit(0);    	}	if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {        	perror("Socket");        	exit(errno);    	}	bzero(&dest, sizeof(dest));    	dest.sin_family = AF_INET;    	dest.sin_port = htons(atoi(argv[2]));    	if (inet_aton(argv[1], (struct in_addr *) &dest.sin_addr.s_addr) == 0) {        	perror(argv[1]);        	exit(errno);    	}	if(connect(sockfd, (struct sockaddr *) &dest, sizeof(dest)) != 0) {        	perror("Connect ");        	exit(errno);    	}	printf("connect to server...\n");			while (1) 	{                	FD_ZERO(&rfds);                       		FD_SET(0, &rfds);            		maxfd = 0;                        		FD_SET(sockfd, &rfds);            		if (sockfd > maxfd)                		maxfd = sockfd;                        		tv.tv_sec = 1;            		tv.tv_usec = 0;                      		retval = select(maxfd + 1, &rfds, NULL, NULL, &tv);			if (retval == -1) 			{		                printf("select error! %s", strerror(errno));              				break;		        } else if (retval == 0) {             			//printf("no msg,no key, and continue to wait……\n");                 		continue;            		} else {				if (FD_ISSET(0, &rfds)) 				{                                    			bzero(buf, MAXBUF + 1);                    			fgets(buf, MAXBUF, stdin);				                    			if (!strncasecmp(buf, "quit", 4)) 					{                        			printf("request terminal chat!\n");                        			break;                    			}                    			len = send(sockfd, buf, strlen(buf) - 1, 0);                    			if (len > 0)                        			printf("msg:%s send successful,totalbytes: %d!\n", buf, len);                    			else {                        			printf("msg:'%s  failed!\n", buf);                        			break;                    			}                		}                		else if (FD_ISSET(sockfd, &rfds)) 				{                     			bzero(buf, MAXBUF + 1);                    			len = recv(sockfd, buf, MAXBUF, 0);                    			if (len > 0)                        			printf("recv:'%s, total: %d \n", buf, len);                    			else  					{						if (len < 0) 	                            			printf("recv failed!errno:%d,error msg: '%s'\n", errno, strerror(errno));	                        		else	                            			printf("other exit,terminal chat\n");	                        		break;					}                    		}							}	}	close(sockfd);	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -