📄 client.c
字号:
#include <stdio.h>
#include <errno.h>
#include <netinet/in.h>
#include <signal.h>
#include <ctype.h>
#include <fcntl.h>
#define MAX_LINE 500
#define MAX_NAME 100
int init_cli();
#ifndef __SELECT__
int main( void)
{
int sockfd;
int status;
char str[MAX_LINE];
char name[MAX_NAME];
sockfd = init_cli();
if ( sockfd == 0) {
printf( "Init client socket error.\n");
fflush( stdout);
exit( 1);
}
fcntl( sockfd, F_SETFL, O_NONBLOCK);
fprintf( stdout, "Please input your name:");
fscanf( stdin, "%s", name);
strcpy( str, "/");
strcat( str, name);
write( sockfd, str, strlen( str));
fcntl( 0, F_SETFL, O_NONBLOCK);
while ( 1) {
if ( (status = read( sockfd, str, MAX_LINE))>=0 ) {
if ( status == 0) exit(0);
str[status] = '\0';
printf( "%s", str);
fflush( stdout);
}
if ( (status = read( 0, str, MAX_LINE))>0) {
str[status] = '\0';
if ( str[0] == 'q') {
sprintf( str, "%s leave the room.\n", name);
write( sockfd, str, strlen( str));
close( sockfd);
exit( 0);
}
write( sockfd, str, strlen(str));
}
}
return 1;
}
#endif // __SELECT__
int init_cli( void)
// Return sockfd if successful, else 0
{
int sockfd;
int SERV_TCP_PORT;
char SERV_HOST_ADDR[MAX_LINE];
FILE *fd;
struct sockaddr_in serv_addr;
fd = fopen( "config", "r");
fgets( SERV_HOST_ADDR, MAX_LINE, fd);
fscanf( fd, "%d", &SERV_TCP_PORT);
fclose( fd);
bzero( (char*)&serv_addr, sizeof( serv_addr));
serv_addr.sin_family =AF_INET;
serv_addr.sin_addr.s_addr =inet_addr( SERV_HOST_ADDR);
serv_addr.sin_port =htons( SERV_TCP_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);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -