Linux创建server服务器实现多方信息收发

devtools/2025/1/16 1:37:30/

一,服务端

        1.创建socket套接字,用于网络通信,同一台机器上的进程也可以通过本地套接字进行通信

       //1.socket

        s_fd = socket(AF_INET,SOCK_STREAM,0);

        if(s_fd == -1){

                perror("socket");

                exit(-1);

        }

        //server address

        s_addr.sin_family = AF_INET;

        s_addr.sin_port = htons(atoi(argv[2]));

        inet_aton(argv[1], &s_addr.sin_addr);

        2.bind函数:int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

sockfd:        socket文件描述符 

addr:            构造出IP地址 + 端口号

addrlen:       sizeof(addr)长度

返回值:         成功返回0,失败返回-1, 设置errno

作用: 为套接字分配名称    

当使用socket创建套接字时,它存在于名称空间(地址族)中,但没有为其分配地址。 bind() 将 addr 指定的地址分配给文件描述符 sockfd 引用的socket。

bind(s_fd,(struct sockaddr *)&s_addr, sizeof(struct sockaddr_in));

        3.listen()监听函数:在TCP服务器编程中listen函数把进程变为一个服务器,并指定相应的套接字变为被动连接。listen函数在一般在调用bind之后-调用accept之前调用。

listen(s_fd,10);

printf("wait\n");

        4.accept函数:

accept()接受一个客户端的连接请求,并返回一个新的套接字(被动监听客户端的三次握手连接请求,三次握手成功即建立连接成功)。所谓“新的”就是说这个套接字与socket()返回的用于监听和接受客户端的连接请求的套接字不是同一个套接字。与本次接受的客户端的通信是通过在这个新的套接字上发送和接收数据来完成的。原文链接:https://blog.csdn.net/weixin_43743711/article/details/106879165
 

主代码:

while(1){

        c_fd = accept(s_fd, (struct sockaddr *)&c_addr,&clen);

        if(c_fd == -1){

                perror("accept");

        }

        mark++;

        printf("get connect:%s\n",inet_ntoa(c_addr.sin_addr));

        if(fork() == 0){

                if(fork() == 0){

                        while(1){

                                sprintf(msg,"welcome No.%d client", mark);

                                write(c_fd,msg,strlen(msg));

                                sleep(2);

                        }

                }

                //5.read

                while(1){

                        memset(readBUF,0,sizeof(readBUF));

                        n_read = read(c_fd,readBUF,128);

                        if(n_read == -1)

                        {

                                perror("read");

                        }

                        else{

                                printf("\n get message:%d, %s\n",n_read,readBUF);

                        }

                }

              break;

        }

}

        头文件有:

#include<stdio.h>

#include<sys/types.h>

#include<sys/socket.h>

#include<netinet/in.h>

#include<arpa/inet.h>

#include<stdlib.h>

#include<string.h>

#include<unistd.h>

        效果图:


http://www.ppmy.cn/devtools/150806.html

相关文章

【CSS】渐变光晕

dom元素 <div id"box" class"glow"></div>css样式 #box { height: 300px;width: 300px;background-image: -webkit-gradient(radial, 50% 50%, 0, 50% 50%, 127, color-stop(0%, #CE1A1A), color-stop(100%, #ffffff));background-image:…

(Arxiv-2023)LORA-FA:针对大型语言模型微调的内存高效低秩自适应

LORA-FA&#xff1a;针对大型语言模型微调的内存高效低秩自适应 paper是香港浸会大学发表在Arxiv 2023的工作 paper title&#xff1a;LORA-FA: MEMORY-EFFICIENT LOW-RANK ADAPTATION FOR LARGE LANGUAGE MODELS FINE-TUNING ABSTRACT 低秩自适应 (LoRA) 方法可以大大减少微调…

战略与规划方法——深入解析波士顿矩阵(BCG Matrix):分析产品组合的关键工具

深入解析波士顿矩阵(BCG Matrix):分析产品组合的关键工具 在现代商业管理中,合理地分析和管理产品组合对于企业的成功至关重要。波士顿矩阵(BCG Matrix),又称为成长份额矩阵,是一种由波士顿咨询集团(Boston Consulting Group)在20世纪70年代提出的战略工具,用于帮助…

深入Android架构(从线程到AIDL)_22 IPC的Proxy-Stub设计模式04

目录 5、 谁来写Proxy及Stub类呢? 如何考虑人的分工 IA接口知识取得的难题 在编程上&#xff0c;有什么技术可以实现这个方法&#xff1f; 范例 5、 谁来写Proxy及Stub类呢? -- 强龙提供AIDL工具&#xff0c;给地头蛇产出Proxy和Stub类 如何考虑人的分工 由框架开发者…

excel VBA 基础教程

这里写目录标题 快捷键选择所有有内容的地方 调试VBA录制宏&#xff0c;打开VBA开发工具录制宏,相当于excel自动写代码&#xff08;两个表格内容完全一致才可以&#xff09; 查看宏代码保持含有宏程序的文件xlsm后缀&#xff08;注意很容易有病毒&#xff09;宏文件安全设置 使…

pytorch小记(三):pytorch中的最大值操作:x.max()

pytorch小记&#xff08;三&#xff09;&#xff1a;pytorch中的最大值操作&#xff1a;x.max&#xff08;&#xff09; 初始化张量&#xff1a;1. x.max(dim0)对比每个位置的值&#xff1a;合并最大值&#xff1a; 2. x.max(dim1)3. x.max(dim2)总结 在 PyTorch 中&#xff0c…

智能网联汽车技术底盘线控技术

底盘线控是通过CAN总线来进行控制的&#xff1b; CAN收发器类似于ECU或者是单片机&#xff0c;作用是用于发送高低电平&#xff0c;控制CAN的差分信号&#xff1b; 终端电阻又被称作为数据传输终端&#xff1a;防止数据以回声的形式在线段被反射&#xff1b; CAN总线如何传输…

【PGCCC】PostgreSQL 临时文件的使用

临时文件 某些查询操作&#xff08;例如sort或hash表&#xff09;需要一些内存功能。此内存由运行时配置提供work_mem。 来自官方文档work_mem work_mem (整数) 设置在写入临时磁盘文件之前查询操作&#xff08;例如排序或哈希表&#xff09;使用的基本最大内存量。 请注意&…