LINUX 网络编程 相关函数

网络编程
socket函数
#include <sys/types.h> / See NOTES /
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
socket()用于创建一个套接字并返回一个描述符

• The domain 参数制定中网络协议簇;选择的协议将会用于通讯,协议名在 <sys/socket.h>中定义。常用的
• AF_INET IPv4 网络协议
• AF_INET6 IPv6 网络协议
• type是网络程序所采用的通讯协议(SOCK_STREAM,SOCK_DGRAM等)。
• SOCK_STREAM表明用的是TCP 协议,这样会提供按顺序的,可靠,双向,面向连接的比特流。
• SOCK_DGRAM 表明用的是UDP协议,这样只会提不可靠,无连接的通信。
• protocol 制定一个协议用于type,正常情况用0代替
• 该函数执行成功是返回新套接字的文件描述符,错误时,返回-1

• bind函数
#include <sys/types.h>
#include <sys/socket.h>
int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
• bind 为套接字 sockfd 指定本地地址 my_addr. my_addr 的长度为 addrlen (字节).传统的叫法是给一个套接字分配一个名
字. 当使用 socket(2), 函数创建一个套接字时,它存在于一个地址空间(地址族), 但还没有给它分配一个名字
• 函数执行成功返回0,否则返回-1,

• htonl, htons, ntohl, ntohs函数
NAME
htonl, htons, ntohl, ntohs - convert values between host and network byte order
SYNOPSIS
#include <arpa/inet.h>
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
DESCRIPTION
The htonl() function converts the unsigned integer hostlong from host byte order to network byte order.
The htons() function converts the unsigned short integer hostshort from host byte order to network byte
order.
The ntohl() function converts the unsigned integer netlong from network byte order to host byte order.
The ntohs() function converts the unsigned short integer netshort from network byte order to host byte
order.
• 本次用到的是htons 用于将端口号转换为网络字节序 ,

• INADDR_ANY 绑定所有网卡

• C 库函数 void *memset(void *str, int c, size_t n) 复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。

• listen 函数
#include <sys/socket.h>
int listen(int s, int backlog);
• 在接收连接之前,首先要使用 socket(2) 创建一个套接字,然后调用 listen 使其能够自动接收到来的连接并且为连接队列指
定一个长度限制. 之后就可以使用 accept(2) 接收连接. listen 调用仅适用于 SOCK_STREAM 或者 SOCK_SEQPACKET 类型
的套接字.
• 参数 backlog 指定未完成连接队列的最大长度.如果一个连接请求到达时未完成连接 队列已满,那么客户端将接收到错误
ECONNREFUSED. 或者,如果下层协议支持重发,那么这个连接请求将被忽略,这样客户端 在重试的时候就有成功的机会.
• 函数执行成功时返回0.错误时返回-1,并置相应错误代码. errno

• accept函数
#include <sys/types.h>
#include <sys/socket.h>
int accept(int s, struct sockaddr *addr, socklen_t *addrlen);

DESCRIPTION 描述
accept 函数用于基于连接的套接字 (SOCK_STREAM, SOCK_SEQPACKET 和 SOCK_RDM). 它从未完成连接队列中取出第一个连接
请求,创建一个和参数 s 属性相同的连接套接字,并为这个套接字分配一个文件描述符, 然后以这个描述符返回.新创建的描述
符不再处于倾听状态.原 套接字 s 不受此调用的影响.注意任意一个文件描述符标志 (任何可以被 fcntl以参数 F_SETFL 设
置的值,比如非阻塞式或者异步状态)不会被 accept. 所继承.
• 参数 s 是以 socket(2) 创建,用 bind(2) 绑定到一个本地地址,并且在调用了 listen(2). 之后正在侦听一个连接的套接
字. 参数 addr 是一个指向结构sockaddr的指针.这个结构体以连接实体地址填充. 所谓的连接实体,就是众所周知的网络
层.参数 addr 所传递的真正的地址格式依赖于所使用的套接字族. (参见 socket(2) 和各协议自己的手册页). addrlen 是
一个实时参数: 它的大小应该能够足以容纳参数 addr 所指向的结构体;在函数返回时此参数将以字节数表示出返回地址的 实
际长度.若 addr 使用NULL作为参数,addrlen将也被置为NULL.
• 如果队列中没有未完成连接套接字,并且套接字没有标记为非阻塞式, accept 将阻塞直到一个连接到达.如果一个套接字被标
记为非阻塞式而队列 中没有未完成连接套接字, accept 将返回EAGAIN.
• 使用 select(2) 或者 poll(2). 可以在一个套接字上有连接到来时产生事件.当尝试一个新的连接时 套接字读就绪,这样我
们就可以调用 accept 为这个连接获得一个新的套接字.此外,你还可以设置套接字在唤醒时 接收到信号 SIGIO; 细节请参见
socket(7)
• 对于那些需要显式确认的协议,比如 DECNet, accept 可以看作仅仅从队列中取出下一个连接而不做确认.当在这个新的文件
描述符上进行普通读写操作时暗示了确认,当关闭这个新的套接字时暗 示了拒绝.目前在Linux上只有DECNet有这样 的含义.

• connect函数
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
• sockfd为socket返回的文件描述符
• addr 为sockaddr_in结构体的地址 ,并将其强制转换为const struct sockaddr ,格式为(const struct sockaddr *)&addr
• addrlen 可直接为sizeof(addr)
• 成功时返回0,失败返回-1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值