千家信息网

socket编程函数详解

发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,socket()#include #include int socket(int domain,int type,int protocol)返回值:成功返回一个文件描述符(注意,这个套接字不能用于和用
千家信息网最后更新 2025年12月03日socket编程函数详解

socket()

#include

#include

int socket(int domain,int type,int protocol)

返回值:成功返回一个文件描述符(注意,这个套接字不能用于和用户进行通信,只能用于listen和accept客户端的连接请求),失败返回-1

参数

domain

AF_INET IPv4 Internet protocols

type

SOCK_STREAM 可以提供测序、可靠的双向,字节流

SOCK_DGRAM 支持数据报(无连接、不可靠消息的一个固定的最大长度)

protocol

can be specified as 0


bind()

#include

#include

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

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

描述:

当创建一个套接字,它存在于一个名称空间(家庭地址),但没有地址分配给它。bind()将指定的地址赋给addr的套接字sockfd提到的文件描述符。addrlen,以字节为单位,指出通过addr的地址结构。传统上,这个操作称为"将一个名称分配给一个套接字"。


#define __SOCKADDR_COMMON(sa_prefix) \
sa_family_t sa_prefix##family


struct sockaddr_in

{

__SOCKADDR_COMMON (sin_);

in_port_t sin_port; /* Port number. */

struct in_addr sin_addr; /* Internet address. */

};


typedef uint32_t in_addr_t;

struct in_addr

{

in_addr_t s_addr;

};


listen()

#include

#include

int listen(int sockfd, int backlog);

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

参数:

backlog

待办事项列表参数定义等待连接的队列的最大长度为sockfd可能增长。如果一个连接请求到达队列满时,客户端可能会收到一个错误的指示ECONNREFUSED或者,如果底层协议支持重传,请求可能会被忽略,这样在连接成功后再尝试。


accept()

#include

#include

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

描述:

accept()函数创建并返回了一个新的套接字client_sock,用于与客户端通信。

假设一共有3个客户端连接到服务器端。那么在服务器端就一共有4个套接字:第1个是socket()返回的、用于监听的套接字;其余3个是分别调用3次accept()返回的不同的套接字。


send()

#include

#include

ssize_t send(int sockfd, const void *buf, size_t len, int flags);

返回值:

>0 数据发送成功

<=0 发送失败需要重试

参数:

前三个参数等同于write

sockfd:发送端套接字描述符;

buf:发送端的发送缓冲区,用来暂时存放要发送的数据;

len:要发送数据的长度;

第四个参数flag的参数值说明:

flag一般设为0

描述:

send先检查发送端要发送数据的长度len和sockfd发送缓冲区的长度,如果len>sockfd发送缓冲区的长度,函数返回SOCKET_ERROR;

如果len<=发送端缓冲区的长度,send就先检查协议是否正在发送 发送缓冲区的数据,如果协议正在发送数据,则send等待协议发完数据,如果此时协议还没有开始发送sockfd发送缓冲区的数据或者该缓冲区为空,那么send就比较len和sockfd发送缓冲区剩下的长度;

如果len>sockfd发送缓冲区的剩余长度,send就等待协议把发送缓冲区上的数据发送完毕,如果len<发送缓冲区的剩余长度,send就把buf中的数据copy到sockfd发送缓冲区的剩余空间里;

如果send函数copy成功,则返回实际拷贝的字节数,否则返回SOCKET_ERROR;send函数把数据copy到sockfd发送缓冲区后就返回了,此时这些数据不一定被对端收到了(因为数据的传输是由协议来完成的,send在copy之后就返回了),如果协议在传输数据的过程中出现网络错误的话,下一个send函数将出错返回SOCKET_ERROR;

每一个send在copy数据的时候都要等待上一个数据被协议传输到连接的另一端,如果协议在传输数据的过程,网络中断或出现异常,send函数就会返回SOCKET_ERROR.


recv()

#include

#include

ssize_t recv(int sockfd, void *buf, size_t len, int flags);

返回值:

<0 出错

=0 对方关闭了连接

>0 接收到数据的字节数

参数:

前三个参数等同于read

sockfd:接收端套接字描述符

buf:接收端接收缓冲区,存放

len:buf的长度

第四个参数和send()的一样,一般置为0


connect()

#include

#include

int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);

参数:

sockfd:主动建立连接请求的套接字

addr:用来保存服务器端的端口号、ip地址

数据 缓冲区 缓冲 参数 套接字 长度 函数 成功 地址 客户 传输 字节 客户端 服务器 端的 剩余 服务 最大 三个 名称 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库查询排名前50 天津软件开发驻场服务费 诚信经营数据库运维服务 做软件开发的男生是it男吗 周道科技软件开发 太原企业软件开发 网络技术应用课件免费下载 四叶草网络安全培训学院 杜文亮网络安全 无锡进口服务器客户至上 我的世界服务器扫地僧怎么造 lol又开一个新服务器 加强中学生网络安全教育 凌众互联网科技网上兼职 河南星创科技网络技术有限公司 互联网领先科技上市公司 软件开发与工程技术是干什么的 服务器接电脑步骤 网安启明星网络安全题型 网络安全英语百度百科 易赢互联网科技信息有限公司 玩游戏时总是出现无法连接服务器 网络安全督导表 虚拟化服务器报价 魔兽世界巫妖王数据库 服务器有哪些不安全因素的影响 衢州app软件开发设计 n270小主机改文件服务器 网络技术最新发展5G 青岛网络时间服务器ip地址
0