📄 talkc.c
字号:
#include"talk.h"#include<signal.h>#include<ctype.h>int init(void){ char addr[MAX_LINE]; int port = 0; int sockfd = -1; FILE *fd = NULL; struct sockaddr_in serv_addr; fd=fopen("config","r"); fgets(addr, MAX_LINE, fd); fscanf(fd, "%d", &port); fclose(fd); if (addr[strlen(addr) - 1] == '\n') addr[strlen(addr) - 1] = '\0';// printf("get server ip: %s\n", addr);// printf("get server port: %d\n", port); bzero((char*)&serv_addr,sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr=inet_addr(addr); serv_addr.sin_port = htons(port); if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0){ printf("client:can't open stream socker.\n"); fflush(stdout); return(0); } if(connect(sockfd,(struct sockaddr*)&serv_addr,sizeof(serv_addr))<0){ printf("client:can't connect to server\n"); fflush(stdout); return(0); } return(sockfd);}void add_socket(fd_set *sockset, int sockfd){ FD_ZERO(sockset); FD_SET(sockfd, sockset); FD_SET(0, sockset);}int main(void){ int sockfd = -1; int status = -1; char str[MAX_LINE]; char name[MAX_NAME]; fd_set sockset; sockfd= init(); if(sockfd <= 0){ printf("init client socket error.\n"); fflush(stdout); exit(1); } add_socket(&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("Wirte error\n"); exit(0); } } add_socket(&sockset, sockfd); } return 1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -