简易TCP C/S通信

效果

s.c

复制代码
root@TTT:~# cat s.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <assert.h>


int main(int argc, char *argv[])
{
        int fd = -1;
        int ret = -1;
        int opt = 1;
        struct sockaddr_in addr;
        struct sockaddr_in client;
        socklen_t len = 0;
        pid_t pid = -1;


        addr.sin_family = AF_INET;
        addr.sin_port = htons(7000);
        addr.sin_addr.s_addr = inet_addr("0.0.0.0");

        client.sin_family = AF_INET;
        client.sin_port = htons(7001);
        client.sin_addr.s_addr = inet_addr(argv[1]);

        pid = fork();
        if (pid == -1)
        {
                perror("fork:");
        }
        else if (pid > 0)
        {
                fd = socket(AF_INET, SOCK_STREAM, 0);
                setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));

                printf("Server# set server IP %s Port %d\n", inet_ntoa(addr.sin_addr), ntohs(addr.sin_port));
                ret = bind(fd, (struct sockaddr *)&addr, sizeof(addr));
                assert(ret == 0);

                ret = listen(fd, 6);
                assert(ret == 0);

                printf("Server# start accept\n");
                len = sizeof(client);
                ret = accept(fd, (struct sockaddr *)&client, &len);
                printf("Server# accept IP %s Port %d connected\n", inet_ntoa(client.sin_addr), ntohs(client.sin_port));
                close(ret);
                close(fd);
        }
        else
        {
                usleep(20000);
                fd = socket(AF_INET, SOCK_STREAM, 0);
                setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
                assert(fd != -1);

                printf("Client# set client IP %s Port %d\n", inet_ntoa(client.sin_addr), ntohs(client.sin_port));
                ret = bind(fd, (struct sockaddr *)&client, sizeof(client));
                assert(ret == 0);

                printf("Client# connect to IP %s Port %d\n", inet_ntoa(addr.sin_addr), ntohs(addr.sin_port));
                ret = connect(fd, (struct sockaddr *)&addr, sizeof(addr));
                close(fd);
        }
        usleep(2000);

        return 0;
}
相关推荐
人邮异步社区1 小时前
怎么把C语言学到精通?
c语言·开发语言
爱刷碗的苏泓舒2 小时前
PPP-AR 中的参考星选取:数学原理、评价指标与切换处理
算法·gnss·模糊度固定·ppp-ar·星间单差·参考星·卫星端偏差
烬羽4 小时前
递归老写崩?一个"退回"公式,把回溯题变成填空题
javascript·深度学习·算法
闪电悠米4 小时前
力扣hot100-41.缺失的第一个正数-原地哈希详解
数据结构·算法·哈希算法
星空露珠5 小时前
28种颜色对应名称,
开发语言·数据库·算法·游戏·lua
xiaobobo33306 小时前
C语言中宏定义宏名和宏值之间的关系
c语言·宏定义·语义型
QXWZ_IA7 小时前
桥梁数字孪生怎么落地?
人工智能·科技·算法·智能硬件·政务
Kel7 小时前
输出层与反分词(Output Layer & Detokenization)
人工智能·算法·架构
陕西企来客7 小时前
2026年7月技术好GEO优化方案:算法适配与内容策略
人工智能·算法·机器学习·技术好geo优化
风栖柳白杨7 小时前
【面试】AI算法工程师_空白自测版本
人工智能·算法·面试