linux系统的学习:网络

一、OSI开放系统互连参考模型

1.七层模型

物理层--数据链路层--网络层--传输层--会话层--表示层--应用层

2.四层模型

网络接口层--网络层--传输层--应用层

3.五层模型

物理层--数据链路层--网络层--传输层--应用层

二、socket

专门用来进程网络通信的文件

三、TCP协议

特点:

1)面向连接:通信之前,建立好连接

2)可靠连接(无丢失、无失序、无差错、无重复)

3)字节流传输

四、UDP协议

1)无连接

2)不可靠

3)数据报传输

五、TCP通信模型

六、客户端

1.int socket(int domain, int type, int protocol);

@domain:通信域(本地--AF_UNIX/AF_LOCAL,IPV4--AF_INET,IPV6--AF_INET6);

@type:SOCK_STREAM--流式套接字,SOCK_DGRAM--数据报套接字;

@protocol:协议(tcp,udp,0是默认协议);

返回值:

成功返回socket的文件描述符;失败返回-1&&errno会被设置

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

@sockfd:要连接的文件

@:要通信的服务器地址(IP+端口号),找到一台主机以及这台主机上的进程

@:由sockefd决定,表示addr参数地址的大小

3.bzero(&seraddr,sizeof(seraddr));

清空目标,清空的大小

4.实际用的结构体是struck sockaddr_in

5.htons

将端口号的字节序转为网络字节序

6.inet_addr

将IP的字节序转为网络字节序

cpp 复制代码
int client_connect(void)	
{
	int fd = socket(AF_INET,SOCK_STREAM,0);
	if(fd < 0)
	{
		perror("socket fail");
		return -1;
	}

	printf("fd = %d\n",fd);
	struct sockaddr_in seraddr;
	bzero(&seraddr,sizeof(seraddr));
	seraddr.sin_family = AF_INET;
	seraddr.sin_port = htons(50000);
	seraddr.sin_addr.s_addr = inet_addr("127.0.0.1");
	if(connect(fd,(const struct sockaddr*)&seraddr,sizeof(seraddr)) < 0)
	{
		perror("connect fail");
		return -1;
	}
	return fd;
}
相关推荐
一隅论数智10 小时前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
未济10 小时前
linux 配置环境变量
linux
傲世仙尊10 小时前
目录即文件-Ext文件系统收尾篇
linux·c语言
XiHongShi201610 小时前
STM32F407 RTC定时器例程,建议保存
stm32·单片机·学习
虎头金猫11 小时前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
爱吃苹果的日记本11 小时前
离散数学第六课
学习·离散数学
_艾伦 耶格尔.12 小时前
进程间通信
linux
AI职业加油站12 小时前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
旖旎夜光12 小时前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控