Linux编程网络通信
====网络通信====
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
创建套接字,domain的值如下:
AF_UNIX unix域套接字,本地使用
AF_INET IPV4套接字
AF_INET6 IPV6套接字
type有两种: SOCK_STREAM(TCP流), SOCK_DGRAM(UDP流)
protocol基本恒为0,极少数会去设置它
返回0成功创建,-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);
监听套接字链接,成功返回0,-1失败
#include <sys/socket.h>
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
接受客户的链接,返回一个文件描述符,出错返回-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数据,成功返回接受的字节数,返回0表示接受完成,-1出错
ssize_t sendto(int sockfd, const void *buffer, size_t length,
int flags, const struct sockaddr *dest_addr, socklen_t addrlen);
发送UDP数据,成功返回实际发送的字节数,返回-1出错
UNIX套接字地址结构
struct sockaddr_un {
sa_family_t sun_family; /* 永远等于AF_UNIX */
char sun_path[108]; /* 域路径名称,以'\0'结束 */
};
#include <sys/socket.h>
int socketpair(int domain, int type, int protocol, int sockfd[2]);
用于进程之间,创建unix域套接字,成功返回0,-1失败
#include <arpa/inet.h>
uint16_t htons(uint16_t host_uint16);
uint16主机字节序转换为网络字节序
uint32_t htonl(uint32_t host_uint32);
uint32主机字节序转换为网络字节序
uint16_t ntohs(uint16_t net_uint16);
uint16网络字节序转换位主机字节序
uint32_t ntohl(uint32_t net_uint32);
uint32网络字节序转换位主机字节序
struct in_addr {
in_addr_t s_addr /*无符号的32位整数 */
};
struct sockaddr_in {
sa_family_t sin_family; /* 永远标为AF_INET */
in_port_t sin_port /* 端口 */
struct in_addr sin_addr; /* IP地址 */
unsinged char __pad[X]; /* 仅用于结构对齐 */
};
sin_port,sin_addr是网络字节序
struct in6_addr {
uint8_t s6_addr[16]; /* IP6地址 */
};
struct sockaddr_in6 {
sa_family_t sin6_family; /*永远标为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以上) */
};
全部结构都是网络字节序
#include <arpa/inet.h>
int inet_pton(int domain, const char *src_str, void *addrptr);
转换字符串格式的IP地址为对应的结构体, 返回0成功,-1出错
const char *inet_ntop(int domain, const void *addrptr,
char *dst_str, size_t len);
转换地址结构体为对应的字符串格式,返回0成功,-1出错
#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);
释放上面函数获得IP地址信息,分配的内存
#include <sys/socket.h>
int shutdown(int sockfd, int how);
关闭套接字,方式如下:
1.SHUT_RD 关闭读
2.SHUT_WR 关闭写
返回0表示成功,-1出错
#include <sys/socket.h>
int getsockname(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
int getpeername(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
返回本地/对端的套接字地址信息,返回0成功,-1失败
#include <sys/sendfile.h>
ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);
通过套接字传输一个文件的内容,返回传输的字节数,返回-1出错
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);
获取/设置套接字的属性,返回0成功,-1失败
转载于:https://www.cnblogs.com/y2ghost/p/4364271.html
Linux编程网络通信相关推荐
- Linux 编程经典书籍推荐
成为一名精通 Linux 程 序设计的高级程序员一直是不少朋友孜孜以求的目标.根据中华英才网统计数据,北京地区 Linux 程序员月薪平均为 Windows 程序员的 1.8 倍.Java 程序员的 ...
- Unix/Linux编程:进程间通信(IPC)总结
IPC工具分类 如上,Unix系统上IPC根据功能可以分为三类 通信:这些工具关注进程间的数据交换 同步:这些进程关注进程和线程操作之间的同步 信号:虽然信号的主要作用不为此,但是在特定场景下仍然可以 ...
- linux编程书籍推荐
2019独角兽企业重金招聘Python工程师标准>>> Linux编程推荐书籍一览表 Linux编程推荐书籍一览表 shell 编程 <LINUX与UNIX SHELL编程指南 ...
- Linux编程题:信号量同步三进程依次打印若干次ABC
三个进程依次打印ABC..... 思路及大致流程如下: 思路取自这位大哥: Linux编程题:创建3个线程分别打印abc,用信号量进行同步_cleverlemon的博客-CSDN博客 这位大哥写的是线 ...
- linux编程取消wait函数,Linux编程基础之进程等待(wait()函数).pdf
Linux编程基础之进程等待(wait()函数) 编程过程中,有时需要让一个进程等待另一个进程 ,最常见的是父进程等待自己的子进程 ,或者父进程回收自己 的子进程资源包括僵尸进程.这里简单介绍一下系统 ...
- linux的编程命令,linux编程常用命令
学习linux编程最基本的就是要掌握常用的编程命令,下面由学习啦小编为大家整理了linux编程常用命令相关知识,希望大家喜欢! linux编程常用命令1.编译应用程序 make -f makefile ...
- Linux 编程中的API函数和系统调用的关系【转】
转自:http://blog.chinaunix.net/uid-25968088-id-3426027.html 原文地址:Linux 编程中的API函数和系统调用的关系 作者:up哥小号 API: ...
- 学习Unix/Linux编程要学些什么
最近利用空余时间看了一下<Unix/Linux编程实践教程>,原书名为:Understanding Unix/Linux Programming: A Guide to Theory an ...
- Linux编程下open()函数的用法
Linux编程下open()函数的用法 open(打开文件) 相关函数: read,write,fcntl,close,link,stat,umask,unlink,fopen 表头文件 : #i ...
最新文章
- linux cache控制 内核,linux内核之bcache简介 [转]
- C# HashTable 使用用法详解
- Facebook 如何管理150亿张照片
- idea debugger console 不见了--还原 console 图标
- C#快速找出磁盘内的所有文件
- 原价19万的美系插混,2年后落地只要11万~15万,微蓝6 PHEV为啥这么惨
- 新法案下 苹果或被禁止在设备上预装自家应用
- matlab基本使用指南
- 量化策略回测tdma
- 理解BERT Transformer:Attention is not all you need!
- access统计行数 vb_VB代码行数统计工具
- 记录-vant-DatetimePicker时间选择器,时间选择滚动区域消失。[class*=van-hairline]
- 计算机突然蓝屏重启,最近电脑经常蓝屏重启。
- d类数字功放芯片音质怎么样?
- CMMI——认证流程
- Ubuntu18.04中如何更换为清华的镜像源
- 监控工具——Metrics的Histogram可配置项
- android 手机映射软件 mac地址,android手机最好用的mac地址转换
- Vue2 SSR 的优化之旅
- shp文件批量定义投影坐标系python