请选择 进入手机版 | 继续访问电脑版

linux网络编程socket

[复制链接]
谢世民 发表于 2020-12-31 18:07:14 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
一些关于网络编程的知识点:
TCP毗连发送的数据,无不对,不丢失,不重复,且按序到达
UDP尽最大积极交付,既不包管可靠交付
字节序:指多字节数据在盘算机内存中存储大概网络传输时各字节的存储顺序
常见序:Little endian小端字节序
Big endian大端字节序
网络字节序是大端字节序
socket(建立一个socket通信):

需要的头文件:
#include
#include
参数原型:int socket(int domain, int type, int protocol);
domain:
AF_INET:IPv4协议
AF_INET6:IPv6协议
AF_LOCAL:UNIX域协议
AF_ROUTE:路由套接字
AF_KEY:密钥套接字
type:
SOCK_STREAM:字节流套接字socket
SOCK_DGRAM:数据报套接字socket
SOCK_RAW:原始套接字socket
protocol:0(原始套接字除外)
比方:s_fd = socket(AF_INET,SOCK_STREAM,0);
返回值:非负套接字形貌符
堕落返回-1
bind(对socket定位):

需要的头文件:
#include
#include
参数原型:int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
sockfd:套接字形貌符
addr:是一个指向包罗有本机IP所在及端标语等信息的sockaddr范例的指针,指向要绑定给sockfd的协议所在布局,这个所在布局根据所在创建socket时的所在协议族的不同而不同。
ipv4对应的是:
struct sockaddr{
unisgned short as_family; //协议族
char sa_data[14]; //IP加端口
};
同等替换:
struct sockaddr_in{
sa_family_t sin_family;//协议族
in_port_t sin_port;//端标语
struct in_addr sin_addr;//IP所在布局体
unsigned char sin_zero[8];//填充,没有实际意义,只是为跟sockaddr布局在内存中对齐,这样两者才气相互转换
};

addrlen:所在长度
*比方:
struct sockaddr_in s_addr;
memset(&s_addr,0,sizeof(struct sockaddr_in));
s_addr.sin_family = AF_INET;
s_addr.sin_port = htons(atoi(argv[2]));
inet_aton(argv[1],&s_addr.sin_addr);
bind(s_fd,(struct sockaddr )&s_addr,sizeof(struct sockaddr_in));

返回值:乐成返回0
失败返回-1
listen(期待毗连):

需要的头文件:
#include
#include
参数原型:int listen(int sockfd, int backlog);
sockfd:套接字形貌符
backlog:请求队列中允许的最大请求数,大多数系统默认值为5
比方: listen(s_fd,10);
返回值:乐成返回0
失败返回-1
accept(继承socket连线):

需要的头文件:
#include
#include
参数原型:int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
sockfd:套接字形貌符
addr:客户端所在
addrlen:所在长度
比方:
struct sockaddr_in c_addr;
memset(&c_addr,0,sizeof(struct sockaddr_in));
int len = sizeof(struct sockaddr_in);
c_fd = accept(s_fd,(struct sockaddr *)&c_addr,&len);
返回值:乐成返回0
失败返回-1
connect(建立socket连线):

需要的头文件:
#include
#include
参数原型:int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
sockfd:套接字形貌符
**addr:是一个指向包罗有本机IP所在及端标语等信息的sockaddr范例的指针,指向要绑定给sockfd的协议所在布局,这个所在布局根据所在创建socket时的所在协议族的不同而不同。
ipv4对应的是:
struct sockaddr{
unisgned short as_family; //协议族
char sa_data[14]; //IP加端口
};
同等替换:
struct sockaddr_in{
sa_family_t sin_family;//协议族
in_port_t sin_port;//端标语
struct in_addr sin_addr;//IP所在布局体
unsigned char sin_zero[8];//填充,没有实际意义,只是为跟sockaddr布局在内存中对齐,这样两者才气相互转换
};

addrlen:所在长度
*比方:
struct sockaddr_in c_addr;
memset(&c_addr,0,sizeof(struct sockaddr_in));
c_addr.sin_family = AF_INET;
c_addr.sin_port = htons(atoi(argv[2]));
inet_aton(argv[1],&c_addr.sin_addr);
connect(c_fd,(struct sockaddr )&c_addr,sizeof(struct sockaddr));

返回值:乐成返回0
失败返回-1
服务端操作:

1.毗连协议socket
2.所在准备好bind
3.监听listen
4.毗连accept


客户端操作:

1.毗连协议socket
2.客户毗连主机connect



来源:https://blog.csdn.net/qq_51938263/article/details/111939094
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )