Linux 基本网络编程
基本套接字分为客户机/服务器和点对点模式。
C/S:sever/client---------------------------一般采用TCP
B/S:browser/server-----------------------一般采用UDP
常用的数据结构有in_addr(存储IP地址),sockaddr_in(表示Internet协议地址结构),sockaddr(存储主机IP地址和接口信息)。
struct in_addr{ union{ struct{u_char, s_b1, s_b2, s_b3, s_b4} s_un_b; struct{u_short s_w1, s_s2;} s_un_w; u_long s_addr; } s_un;
}
struct sockaddr_in{ short sin_family; //AF_INET u_short sin_port; //16位端口号 struct in_addr sin_addr; //32位IP地址 char sin_zero[8]; };
struct sockaddr{ unsigned short sa_family; char sa_data[14]; };
例子:
in_addr test; test..s_un_b.s_b1=192; test..s_un_b.s_b2=168; test..s_un_b.s_b3=0; test..s_un_b.s_b4=1;
struct sockaddr_in serverAddr; memst(&serverAddr,0,sizeof(struct sockaddr_in)); serverAddr.sin_family=AF_INET; //AF_INET表示TCP serverAddr.sin_port=htons(80); serverAddr.sin_addr.s_addr=htonl(INADDR_ANY); //INADDR_ANY表示当前所用的IP
常用函数
#incldue<sys/socket.h> //创建套接字 SOCKET PASCAL FAR socket(int af, int type, int protocol) //af指定通信协议--AF_UNIX,AF_INET,AF_NS //type指定套接字类型,SOCK_STREAM(TCP),SOCK_DGRAM(UDP),SOCK_RAM(原始套接字) //protocol指定特定协议 //套接字绑定 int PASCAL FAR bind(SOCKET s, const struct sockaddr FAR *name, int namelen) //s指定要关联的套接字 //name指定要绑定的IP地址与端口信息 //侦听 int PASCAL FAR listen(SOCKET s, int backlog) //backlog指定请求连接队列的最大长度,一般设为5 //侦听,接受数据 SOCKET PASCAL FAR accept(SOCKET s, struct sockaddr FAR* addr, int FAR* addrlen) //s为当前指定的套接字 //addr为保存当前客户端的地址信息 //创建连接 int PASCAL FAR connect(SOCKET s, const struct sockaddr FAR* name, int namelen) //TCP发送数据 int PASACAL FAR send(SOCKET s, const char FAR* buf, int len, int flags); //s指定已经连接的套接字 //buf表示待发送数据的缓冲区 //flags用于设定发送控制参数,一般为0 //TCP接受数据 int PASACAL FAR recv(SOCKAET s,char FAR* buf,int len,int flags); //UDP发送数据 ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen) ssize_t recvform(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *from, socklen_t fromlen) //sockfd表示已经创建好的一个UDP套接字 //to.from用于设置接受方和发送方的地址信息 //tolen,fromlen用于设置地址信息的长度
例子:
TCP:
UDP:
本文 由 cococo点点 创作,采用 知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆 许可协议进行许可。欢迎转载,请注明出处:
转载自:cococo点点 http://www.cnblogs.com/coder2012
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!