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

📄 socket_client.c

📁 Linux下C语言编程例子
💻 C
字号:
#include<sys/types.h>
#include<sys/socket.h>
#include<stdio.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>

/* exec_command()负责在与服务器连接成功后,处理传送过来的指令。 */
void exec_command(int sockfd)
{
    char buf[256];		/* 用于处理输入的缓冲区 */
    FILE *tty = NULL;		/* 用户终端 */
    int n;
    int i;

    /* 打开用户终端。这果没有使用标准输入输出,因为在重定向时,标准输入输出不会指向用户终端,
     * 用户输入带来困难。
     */
    tty = fopen("/dev/tty", "r");
    if (tty == NULL) {
	perror("can't open /dev/tty.");
	exit(1);
    }

    while(1) {
    	if (fgets(buf, BUFSIZ, tty) == NULL || buf[0] == 'q') 
		exit(0);
    	else 			/* 接受用户输入后,传递到server. */
		write(sockfd, buf, sizeof(buf));
		
	for(i = 0; i < 256; i++) buf[i] = 0;	/* 清空缓冲区 */
		
    	if((n = read(sockfd, buf, sizeof(buf))) > 0) { 
        	fputs(buf, stdout);
		fflush(stdout);
	}
    }
}

int main()
{
    int sockfd;			/* 套接字描述符 */
    struct sockaddr_in address;	/* Internet 套接字地址结构 */
    int result;			/* 与server连接的结果 */

    sockfd = socket(AF_INET, SOCK_STREAM, 0);

    address.sin_family = AF_INET;
    address.sin_addr.s_addr = inet_addr("127.0.0.1");
    address.sin_port = htons(19734);

    result =
	connect(sockfd, (struct sockaddr *) &address, sizeof(address));
    if (result == -1) {
	perror("connect to server failed.");
	exit(0);
    }
	
    exec_command(sockfd);	/* 处理通信的内容 */

    close(sockfd);
    exit(0);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -