日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux编程网络通信

發(fā)布時(shí)間:2025/5/22 linux 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux编程网络通信 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

====網(wǎng)絡(luò)通信====
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
創(chuàng)建套接字,domain的值如下:
AF_UNIX???? unix域套接字,本地使用
AF_INET???? IPV4套接字
AF_INET6??? IPV6套接字

type有兩種: SOCK_STREAM(TCP流), SOCK_DGRAM(UDP流)
protocol基本恒為0,極少數(shù)會(huì)去設(shè)置它
返回0成功創(chuàng)建,-1失敗

#include <sys/socket.h>
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
綁定套接字到addr地址,返回0成功,-1失敗

#include <sys/socket.h>
int listen(int sockfd, int backlog);
監(jiān)聽套接字鏈接,成功返回0,-1失敗

#include <sys/socket.h>
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
接受客戶的鏈接,返回一個(gè)文件描述符,出錯(cuò)返回-1值

#include <sys/socket.h>
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
建立到addr地址的鏈接,成功返回0,失敗返回-1值

#include <sys/socket.h>
ssize_t recvfrom(int sockfd, void *buffer, size_t length, int flags,
??? struct sockaddr *src_addr, socklen_t *addrlen);
接受UDP數(shù)據(jù),成功返回接受的字節(jié)數(shù),返回0表示接受完成,-1出錯(cuò)
ssize_t sendto(int sockfd, const void *buffer, size_t length,
??? int flags, const struct sockaddr *dest_addr, socklen_t addrlen);
發(fā)送UDP數(shù)據(jù),成功返回實(shí)際發(fā)送的字節(jié)數(shù),返回-1出錯(cuò)

UNIX套接字地址結(jié)構(gòu)
struct sockaddr_un {
??? sa_family_t sun_family; /* 永遠(yuǎn)等于AF_UNIX */
??? char sun_path[108];???? /* 域路徑名稱,以'\0'結(jié)束 */
};

#include <sys/socket.h>
int socketpair(int domain, int type, int protocol, int sockfd[2]);
用于進(jìn)程之間,創(chuàng)建unix域套接字,成功返回0,-1失敗

#include <arpa/inet.h>
uint16_t htons(uint16_t host_uint16);
uint16主機(jī)字節(jié)序轉(zhuǎn)換為網(wǎng)絡(luò)字節(jié)序

uint32_t htonl(uint32_t host_uint32);
uint32主機(jī)字節(jié)序轉(zhuǎn)換為網(wǎng)絡(luò)字節(jié)序

uint16_t ntohs(uint16_t net_uint16);
uint16網(wǎng)絡(luò)字節(jié)序轉(zhuǎn)換位主機(jī)字節(jié)序

uint32_t ntohl(uint32_t net_uint32);
uint32網(wǎng)絡(luò)字節(jié)序轉(zhuǎn)換位主機(jī)字節(jié)序

struct in_addr {
??? in_addr_t s_addr??? /*無符號(hào)的32位整數(shù) */
};

struct sockaddr_in {
??? sa_family_t???? sin_family; /* 永遠(yuǎn)標(biāo)為AF_INET */
??? in_port_t?????? sin_port??? /* 端口 */
??? struct in_addr? sin_addr;?? /* IP地址 */
??? unsinged char?? __pad[X];?? /* 僅用于結(jié)構(gòu)對(duì)齊 */
};
sin_port,sin_addr是網(wǎng)絡(luò)字節(jié)序

struct in6_addr {
??? uint8_t s6_addr[16];??? /* IP6地址 */
};

struct sockaddr_in6 {
??? sa_family_t???? sin6_family;??? /*永遠(yuǎn)標(biāo)為AF_INET6 */
??? in_port_t?????? sin6_port;????? /* 端口 */
??? uint32_t??????? sin6_flowinfo;? /* IPV6 FLOW INFO */
??? struct in6_addr sin6_addr;????? /* IPV6地址 */
??? uint32_t??????? sin6_scope_id;? /* 新增的(kernel2.4以上) */
};
全部結(jié)構(gòu)都是網(wǎng)絡(luò)字節(jié)序

#include <arpa/inet.h>
int inet_pton(int domain, const char *src_str, void *addrptr);
轉(zhuǎn)換字符串格式的IP地址為對(duì)應(yīng)的結(jié)構(gòu)體, 返回0成功,-1出錯(cuò)

const char *inet_ntop(int domain, const void *addrptr,
??? char *dst_str, size_t len);
轉(zhuǎn)換地址結(jié)構(gòu)體為對(duì)應(yīng)的字符串格式,返回0成功,-1出錯(cuò)

#include <sys/socket.h>
#include <netdb.h>
int getaddrinfo(const char *host, const char *service,
??? const struct addrinfo *hints, struct addrinfo **result);
得到hostname,或是service name的IP地址信息,返回0成功,-1失敗

#include <sys/socket.h>
#include <netdb.h>
void freeaddrinfo(struct addrinfo *result);
釋放上面函數(shù)獲得IP地址信息,分配的內(nèi)存

#include <sys/socket.h>
int shutdown(int sockfd, int how);
關(guān)閉套接字,方式如下:
1.SHUT_RD?? 關(guān)閉讀
2.SHUT_WR?? 關(guān)閉寫
返回0表示成功,-1出錯(cuò)

#include <sys/socket.h>
int getsockname(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
int getpeername(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
返回本地/對(duì)端的套接字地址信息,返回0成功,-1失敗

#include <sys/sendfile.h>
ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);
通過套接字傳輸一個(gè)文件的內(nèi)容,返回傳輸?shù)淖止?jié)數(shù),返回-1出錯(cuò)

include <sys/socket.h>
int getsockopt(int sockfd, int level, int optname,
??? void *optval, socklen_t *optlen);
int setsockopt(int sockfd, int level, int optname,
??? const void *optval, socklen_t optlen);
獲取/設(shè)置套接字的屬性,返回0成功,-1失敗

轉(zhuǎn)載于:https://www.cnblogs.com/y2ghost/p/4364271.html

總結(jié)

以上是生活随笔為你收集整理的Linux编程网络通信的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。