linux IPC socket(3)server简单写法

本文介绍了TCP服务器搭建的主要步骤,包括创建socket、绑定地址、监听连接请求及接受客户端连接等过程。详细解释了如何配置socket地址结构及使用相关系统调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写server的一些流程总结

一、向内核申请一个socket

TCP形式

sock_fd = socket(AF_INET, SOCK_STREAM, 0);

UDP形式

sfd = socket(AF_UNIX, SOCK_STREAM, 0);

 

二、使用bind

网络中的地址包括3个方面:1.地址类型 2.IP地址 3.端口

include <netinet/in.h>
 
struct sockaddr {
    unsigned short    sa_family;    // 2 bytes address family, AF_xxx
    char              sa_data[14];     // 14 bytes of protocol address
};
 
// IPv4 AF_INET sockets:
 
struct sockaddr_in {
    short            sin_family;       // 2 bytes e.g. AF_INET, AF_INET6
    unsigned short   sin_port;    // 2 bytes e.g. htons(3490)
    struct in_addr   sin_addr;     // 4 bytes see struct in_addr, below
    char             sin_zero[8];     // 8 bytes zero this if you want to
};
 
struct in_addr {
    unsigned long s_addr;          // 4 bytes load with inet_pton()
};

所以使用bind前要先设置参数:

1.清空的写法:

struct sockaddr_in servaddr = {0};
memset(&servaddr , 0, sizeof(struct sockaddr_un));
bzero(&servaddr, sizeof(struct sockaddr_in));

2.设置初值:

servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(SERV_PORT);
/* 设置sin_addr的方式又有不少 */
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_addr.s_addr = inet_addr("192.168.0.1");    

3.运行bind,会把sockaddr_in强制转换成sockaddr

bind(sfd, (struct sockaddr *) &my_addr, sizeof(struct sockaddr_in))

 

三、listen函数

listen(sock_fd, 1);

第二个参数是:等待连接队列的最大长度

 

四、accept函数

sock_fd = accept(sock_id, NULL, NULL);

第二个和第三个参数与bind类似,不过是客户端的传过来的信息。

accept会返回一个成功连接的socket描述符

对这个返回的描述符写,就是发送数据了

 

转载于:https://www.cnblogs.com/ch122633/p/8315883.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值