Linux网络编程入门 互动版

推荐:用 NSDT场景编辑器 快速搭建3D场景。

利用上述步骤,本节我们实现一个客户端,如下:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <arpa/inet.h>   // sockaddr_in
#include <sys/socket.h>

int main()
{
    const char *server_ip = "127.0.0.1";
    int server_port = 0x1234;
    int client_socket;

    client_socket = socket(PF_INET, SOCK_STREAM, 0);
    if (client_socket == -1) {
        perror("socket create error");
        exit(1);
    }
    printf("client_socket is %d\n", client_socket);

    struct sockaddr_in server_addr;  // server address
    memset(&server_addr, 0, sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(server_port);
    server_addr.sin_addr.s_addr = inet_addr(server_ip);

    if (connect(client_socket, (struct sockaddr*)&server_addr, sizeof(server_addr)) == -1) {
        perror("connect error");
        exit(1);
    }
    printf("connect ok\n");

    char recv_message[100];
    int length = recv(client_socket, recv_message, 100, 0);
    recv_message[length] = '\0';
    printf("Receive form server: %s\n", recv_message);

    close(client_socket);

    return 0;
}

第13行调用调用socket函数创建客户端的套接字(相当于安装电话机)。

第20~24行初始化服务端地址。

第26行调用connect函数连接服务端。

第32~35行利用recv函数接受服务端发来的数据,并打印。

第37行关闭socket。

右侧打开名为client_time的c文件,试编写个时间获取客户端,并测试与服务端的通信。 如下图所示: 9 提示:ls执行后,发现当下目录有一个nohup.out文件,这是在使用nohup命令提交作业后,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中。 运行客户端后,可以获取到服务端的当前时间。