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

📄 client.c

📁 很经典的Linux网络编程源码
💻 C
字号:
#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( void)
{
	int		sockfd;
	int		status;
	char	str[MAX_LINE];
    char    name[MAX_NAME];

    fd_set  sockset;

	sockfd = init_cli();
	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( 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 + -