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

📄 client.c

📁 聊天程序
💻 C
字号:
#include "inet.h"

#include <signal.h>

#include <ctype.h>#include <stdlib.h>



extern  int init_cli( char SERV_HOST_ADDR[MAX_LINE]);



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];		char	SERV_HOST_ADDR[MAX_LINE];



        fd_set  sockset;	printf("Enter server's IP Address:");	scanf("%s",SERV_HOST_ADDR);//	printf("%s",SERV_HOST_ADDR);//	printf("\n");



	sockfd = init_cli(SERV_HOST_ADDR);

	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( char SERV_HOST_ADDR[MAX_LINE]) 

// 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;

//	printf("%s",SERV_HOST_ADDR);

//	fd = fopen( "config", "r");

//	fgets( SERV_HOST_ADDR, MAX_LINE, fd);

//	fscanf( fd, "%d", &SERV_TCP_PORT);

//	fclose( fd);//	strcpy(SERV_HOST_ADDR,"127.0.0.1");	SERV_TCP_PORT=1800;



	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 + -