ZBLOG

你能否给我一份sock api的文档

以下是 Socket API 的核心文档摘要(基于 POSIX标准Linux/Unix系统),涵盖关键函数、参数及简单示例:


1. 核心函数

(1) socket() - 创建套接字

#include <sys/socket.h>
int socket(int domain, int type, int protocol);
  • 参数
    • domain: AF_INET (IPv4)、AF_INET6 (IPv6)、AF_UNIX (本地通信)。
    • type: SOCK_STREAM (TCP)、SOCK_DGRAM (UDP)。
    • protocol: 通常设为 0(自动选择)。
  • 返回值:成功返回文件描述符,失败返回 -1

(2) bind() - 绑定地址

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
  • 参数
    • sockfd: socket() 返回的描述符。
    • addr: 指向包含IP和端口的结构体(如 struct sockaddr_in)。
    • addrlen: 地址结构体大小。

(3) listen() - TCP监听连接

int listen(int sockfd, int backlog);
  • backlog: 等待连接队列的最大长度。

(4) accept() - TCP接受连接

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
  • 返回值: 新的连接描述符(用于数据传输)。

(5) connect() - TCP/UDP连接服务器

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

(6) UDP专用: sendto()/recvfrom()

ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
              const struct sockaddr *dest_addr, socklen_t addrlen);

ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
                struct sockaddr *src_addr, socklen_t *addrlen);

2. IP地址处理

(1) IPv4地址结构 (sockaddr_in)

#include <netinet/in.h>
struct sockaddr_in {
    sa_family_t    sin_family; // AF_INET
    in_port_t      sin_port;   // Port (网络字节序)
    struct in_addr sin_addr;   // IP地址
};

struct in_addr {
    uint32_t s_addr;          // IPv4地址(32位整数)
};

(2) IP转换函数

// 字符串IP → 二进制(如 "192.168.1.1" → in_addr)
int inet_pton(int af, const char *src, void *dst);

// 二进制IP → 字符串
const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);

3. TCP服务端示例代码

#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>

int main() {
    int server_fd = socket(AF_INET, SOCK_STREAM, 0);

    struct sockaddr_in addr;
    addr.sin_family = AF_INET;
    addr.sin_port = htons(8080);       //端口号转换为网络字节序 
    addr.sin_addr.s_addr = INADDR_ANY; //监听所有网卡

    bind(server_fd,(structsockadd*)&addrsizeof(adr));
    
     listen(server_fd10);

     while(1){
         int client_fd=accept(...);
         send(client_fd,"Hello",5 ,0 );
         close(client_fd); 
     }
}

4. UDP客户端示例代码片段

 #include<stdio .h>  
 #include<unist d .h>  

 main(){  
     int fd=socket(AF_INETSOCK_DGRAM ,0);  

     structs ockadd r_i n serv_adr={  
         .sin _family=AF _IN ET ,  
         .sin _port=htons(53), //DNS默认端口  
         .sin _ad dr.s _ad dr=inet_pton("8 .8 .8 .8")};  

     sendto(fdbufferstrle n(buffer ),0 ,&serv_adrsizeof(serv_adr)); 

 }   

如果需要更详细的文档或具体场景的代码实现,可以参考:

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=8198

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?