C语言网络编程入门 socket

我们都有光明的未来

  • 知识点:
  • OSI模型,七层模型 :物理层 数据链路层 网络层 传输层 会话层 表示层 应用层
  • 物理层将信息编码成电流脉冲或者其他信号用于在网上传输
  • 数据链路层:物理编制 网络拓扑结构 MAC 在共享介质环境之中如何进行调度,发送和接收数据,LLC
  • 网络层:负责在源和终点之间建立连接,一般包括网络寻址,可能
  • TCP/IP协议的四层模型以及常见的协议:网络接口层 网间层 传输层 应用层
    在这里插入图片描述
  • 网络接口层包括用于协作IP数据在已有网络介质上传输的协议,
  • 网间层:IP协议 RIP协议负责数据的包装,寻址和路由
  • 传输层:对应的是传输层,提供两种端到端的通信服务
  • 应用层:对应应用层和表达层,包括各种的协议
    客户端服务器模型和字节序
    一般来说,服务器端具有以下特征:
     被动通信;
     始终等待来自客户端的请求;
     自己参与通信的网络接口和端口必须确定;
     处理客户端的请求后将结果(响应)返回给客户端。
    而客户端的特征如下:
     主动通信;
     需要发起请求;
     自己参与通信的网络接口和端口可以不确定;
     发起请求后需要等待服务器回应结果
  • 编程接口BSD socket
  • socket简介:译作套接字,因为由BSD UNIX引入,也称为BSD socket
    可以分为:本地 socket 和 网络socket
    本地socket主要用于进程间通讯,网络 socket则支持不同的协议,TCP UDP等等

在实际网络编程过程中,往往需要在 IP 地址的点分十进制表示和二进制表示之间相互转化,也需要进行主机名和地址的转换,系统提供了一系列函数,一般需要包含头文件<netinet/in.h>和<arpa/inet.h>。

  • 头文件 netinet/in.h
    常用操作:Socket 接口提供了 socket(2)、bind(2)、listen(2)、accept(2)、connect(2)以及 sendto(2)/
    recvfrom(2)这样的函数接口。在符合要求的情况下,也可以使用 read/write 系统调用对 socket
    进行数据读写。
    对于socket,常用的操作有:
  • 创建socket :int socket(int domain, int type, int protocol);
    参数列表中,domain 代表这个 Socket 所使用的地址类型,对于我们讨论的 IPv4 协议的
    IP 地址,使用 AF_INET,也可以使用 PF_INET。实际上这两个值是相等的,但是通常大部
    分人更习惯使用 AF_INET。
    type 代表了这个 Socket 的类型,我们讨论范围是有面向流的(TCP)和面向数据报的
    (UDP)Socket。分别取值 SOCK_STREAM 和 SOCK_DGRAM。
    protocol 是协议类型,对于我们的应用场景,都取 0 即可。
  • 绑定地址和端口:int bind(int socket, const struct sockaddr *address, socklent address_len);
    socket 应该是一个指向 Socket 的有效文件描述符 。
    address 参数就是一个指向 struct sockaddr 结构的指针,根据不同的协议 ,可以有不同
    的具体结构,对于 IP 地址,就是 struct sockaddr_in。但是在调用函数的时候需要强制转换一
    下这个指针来避免警告。
    address_len,因为前面的地址可能有各种不同的地址结构,所以,此处应该指明所使用
    的地址数据结构的长度。编程时直接取 sizeof(struct sockaddr_in)即可。
  • 连接服务器 int connect(int socket, const struct sockaddr *address, socklent address_len);
  • 设置socket为监听模式 int listen(int socket, int backlog);
  • 接收连接 int accept(int socket, struct sockaddr *restrict address, socklen_t *restrict address_len);
  • 数据读写 以下函数均可读取 Socket 数据:read(2)、recv(2)、recvfrom(2)和 recvmsg(2)。相对应的 write(2)、send(2)、sendto(2)和 sendmsg(2)都可以发送数据到 Socket。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值