linux网络编程基础-socket

本文介绍了Linux网络编程中的Socket基础知识,包括Socket的定义、IP地址与端口号的作用,以及Socket作为文件类型的特点。详细讲解了Socket相关的应用函数:IP地址转换、Sockaddr结构、socket创建、bind绑定、listen监听和accept接受连接。通过示例说明了服务器如何通过bind和listen建立监听,以及客户端和服务端如何通过accept进行通信。
摘要由CSDN通过智能技术生成

Socket基础以及相关应用函数

什么是socket

socket,也就是我们所谓的套接字,就像插座一样。

IP地址可以在网络环境中唯一的标识一台主机

端口号:在主机当中唯一标识一个进程。

因此,IP地址+端口号,就可以在网络环境中唯一标识一个进程,而在网络环境中被唯一标识的这个进程,就是socket。

套接字的通讯原理示意图
再说这个套接字,它本质上是Linux操作系统当中文件的一种类型。确切而言,它是一种伪文件,不占用存储。

再说,linux中实际占用存储空间的文件类型有三种:

  • 普通文件
  • 目录
  • 软连接,内部记录所指向文件的文件的路径名。

除此之外,还有四种文件:

  • 字符设备
  • 块设备
  • 管道
  • 套接字

说到管道,它有一个读段和一个写端。而对应到管道,我们来分析socket,这个socket也会建立一个文件描述符,而它的特别之处在于,它有两个缓冲区:一个负责读入,一个负责写出。因此,socket是全双工双向通信的。

从上面的通讯原理示意,可知道套接字都是成对出现的。

相关的应用函数

IP地址转换函数

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

Sockaddr数据结构:

struct sockaddr {
   

    sa_family_t sa_family;      /*address family, AF_xxx */

    char sa_data[14];           /*14 bytes of protocol address */
};

Pv4和IPv6的地址格式定义在netinet/in.h中,IPv4地址用sockaddr_in结构体表示,包括16位端口号和32位IP地址,IPv6地址用sockaddr_in6结构体表示,包括16位端口号、128位IP地址和一些控制字段。

socket函数

#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>

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

domain:

  • AF_INET, 这式大多数用来产生socket的协议,使用TCP或者UDP来传输,使用IPv4地址。

  • AF_INET6,类似,使用IPV6协议

  • AF_UNIT,本地协议,使用在Unix或者Linux上,一般式服务器与客户端在同一机器上时候使用

type也就是使用的协议类型:

  • 流式协议,默认方式tcp,SOCK_STREAM,这个协议是按照顺序的、可靠的、数据完整的
  • 报式协议,默认方式udp,SOCK_DGRAM,这个协议是无连接的,固定长度的传输。

protocal: 传0表示使用默认协议。

bind函数

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

sockfd,文件描述符;

addr,构建出IP地址加端口号

addrlen,sizeof(addr)

返回值,成功0,失败为-1,errno

**服务器程序所监听的网络地址和端口号通常是固定不变的,**客户端程序得知服务器程序的地址和端口号后就可以向服务器发起连接,因此服务器需要调用bind绑定一个固定的网络地址和端口号。

因此,bind的作用是将sockfd和addr绑定到仪器,使sockfd这个用于网络通讯的文件描述符监听addr所描述的地址和端口号。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8keZSPrU-1578983102870)(image.png)]

listen函数

listen声明sockfd处于监听状态,并指明同时最多能与我建立连接的客户端数量。

Accept函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2PgDx6GH-1578983102871)(image.png)]

以下程序,客户端连接服务器端,客户端输入字符串&

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值