Linux进程通信---流套接字

服务器端

#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main()
{
    // 创建套接字
    int sockid = socket(AF_INET, SOCK_STREAM, 0);

    if(sockid == -1)
        perror("socket");

    struct sockaddr_in saddr;
    saddr.sin_family = AF_INET;
    saddr.sin_addr.s_addr = htonl(INADDR_ANY);  // 可接收任何IP连入
    saddr.sin_port = htons(9736);

    // 将套接字绑定到本机地址
    if(bind(sockid, (struct sockaddr*)&saddr, sizeof(saddr)) != 0)
        perror("bind");

    // 可以接收请求
    if(listen(sockid, 5) != 0)
        perror("listen");

    while(1)
    {
        // 捕获请求并建立连接
        int client_sockid = accept(sockid, NULL, NULL);

        printf("Wow! got a call!\n");
        if(client_sockid == -1)
            perror("accept");

        char buf[100] = "Wellcome!\n";

        write(client_sockid, buf, sizeof(buf));

        read(client_sockid, buf, sizeof(buf));

        printf("%s\n", buf);

        close(client_sockid);
    }

    return 0;
}

客户端

#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main()
{
    int sockid = socket(AF_INET, SOCK_STREAM, 0);

    if(sockid == -1)
        perror("socket");

    struct sockaddr_in saddr;
    saddr.sin_family = AF_INET;
    saddr.sin_addr.s_addr = inet_addr("127.0.0.1");  // 服务器地址
    saddr.sin_port = htons(9736);

    // 向服务器发出连接
    if(connect(sockid, (struct sockaddr*)&saddr, sizeof(saddr)) == -1)
        perror("connect");

    char buf[100] = "Hello!";

    write(sockid, buf, sizeof(buf));

    read(sockid, buf, sizeof(buf));

    printf("%s\n", buf);

    close(sockid);

    return 0;
}

这里写图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/u012319493/article/details/79801824