Linux系统编程--网络套接字Socket函数详解+互发消息聊天例子+扩充知识点

本文深入探讨Linux中的网络套接字Socket,包括概念、通信方式、IP与端口、套接字读写、字节序转换、TCP/UDP协议,以及TCP三次握手和四次挥手。同时提供了一对一消息交换的代码实例,适合学习网络编程的开发者参考。
摘要由CSDN通过智能技术生成

文章主要分为三大部分,
①预备知识
②函数详解
③代码实例+解释。
内容过多,可直接根据目录进行翻阅查看需要的部分。
目录在有左下角↙↙↙

套接字的概念

Linux当中的一种文件类型,伪文件,不占用存储空间,可进行IO操作,可间接看做文件描述符使用

预备知识(代码中会使用)

①什么是ip、port(端口)

ip:在网络环境中,唯一表示一台主机
Port:在主机中唯一表示一个进程
通俗来将ip当作地址port当作门牌号

②通信方式有哪几种,Socket有什么区别,为什么

通信方式:信号量 管道 消息队列 共享内存 套接字
**区别:**套接字支持网络上两台以上的设备进行通信,其他其中只能在一台设备上
原因: Socket有双个缓冲区在这里插入图片描述

③如何利用套接字进行读写交流

(1)服务器通过accept函数返回值可以获得客服端的套接字,我们就可以对客服端进行IO(读写)操作
(2)客服端通过connect函数的第一个参数传出服务器套接字,我们就可以对服务器进行IO(读写)操作
(3)将套接字看做文件描述符使用,更好理解

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

④如何查看本机ip

执行语句

ifconfig

上面的是网络ip地址 下面的是测试ip(本机可用)

⑤网络字节序和主机字节序

网络字节序 :通常采用大端对齐(一种将高序字节储存在起始地址)
主机字节序 :通常采用小段对齐(一种将低序字节存储在起始地址)

⑥如何实现网络字节序和主机字节序的转换(转换ip地址)

点分十进制:127.0.0.1 本机测试ip
方法一:点分十进制->无符号整形->网络字节序

#include <arpa/inet.h>
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);

h表示host,n表示network,l表示32位长整数,s表示16位短整数。
如果主机是小端字节序,这些函数将参数做相应的大小端转换然后返回,如果主机是大端字节序,这些函数不做转换,将参数原封不动地返回

方法二:点分十进制->网络字节序

#include <arpa/inet.h>
int inet_pton(int af, const char *src, void *dst);

参数:地址族协议+点分十进制ip+源地址(保存)

⑦sockaddr数据结构

strcut sockaddr 很多网络编程函数诞生早于IPv4协议,那时候都使用的是sockaddr结构体,为了向前兼容,现在sockaddr退化成(void *)的作用,传递一个地址给函数,至于这个函数是sockaddr_in还是sockaddr_in6,由地址族确定,然后函数内部再强制类型转化为所需的地址类型
在这里插入图片描述

⑧TCP/UDP协议 长链接 短链接

协议的概念:是为进行网络中的数据交换而建立的规则、规则或约定
TCP:是点对点通信 更可靠(三次握手)确定连接上才发送包

UDP: 一个是不可靠、不定时 发送信息不需要确认能不能接受到
长链接(实时通信 lol)
短链接(实时性不高 占用资源不多 卡牌游戏)
总结:所以我们Socket进行网络通信采用TCP/IP协议

⑨TCP/IP协议和http ftp socket 协议的关系

(1)TCP/IP为协议栈(原料

(2)http(web网页)ftp(文件传输) socket(网络)都是协议(产物

⑩TCP通讯中的三次握手和四次握手

在这里插入图片描述
比喻三次握手:(连接和传输)
第一次A:微笑
第二次B :微笑+握手
第三次A: 握手

比喻四次握手:(断开连接)
第一次A:请求关闭连接
第二次B:应答请求
第三次B:我也请求关闭连接
第四次A:应答请求

Socket模式流程图

在这里插入图片描述

网络套接字之函数详解

—> 头文件 <—

   
  • 14
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Windalove

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值