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

📄 client.c

📁 Linux网络编程教程适合初学者入门学习
💻 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 + -