Linux网络编程学习笔记

网络编程

进程间通讯 依赖Linux内核 存在功能缺陷:无法多机通讯 ——就要用到网络编程

地址(找到谁)
  • IP地址:标识设备

  • 端口:提供访问通道 访问服务

    FTP服务器的TCP端口号21

    TeLnet服务器TCP端口号23

    TFTP服务器UDP端口号69

数据(对话)
  • 协议(http,tcp/udp,串口等) 一种数据格式

tcp协议:面向连接 (AB打电话)连接可靠,精细操作

udp协议:面向报文(AB发短信)连接不可靠,数据量大,内存响应快

字节序

字节序是指多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序

  • Little endian 将低序字节存储在起始地址 小端字节序
  • Big endian 将高序字节存储在起始地址 大端字节序

网络字节序=大端字节序

x86系列CPU都是小段字节序

#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);//返回主机字节序的值

Socket套接字 服务器

在这里插入图片描述

服务器开发步骤
  1. 创建套接字
  2. 为套接字添加信息(IP地址和端口号)
  3. 监听网络连接
  4. 监听到有客户端接入,接受一个连接
  5. 数据交互
  6. 关闭套接字,断开连接
客户端开发步骤
  1. 通道
  2. connect连接
  3. 数据交互
  4. 关闭

1.连接协议

#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
int socket(int domain, int type, int protocol);

在这里插入图片描述

2.准备地址

#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>   
int bind(inct sockfd, const struct sockaddr *addr, socklen_t addrlen);

在这里插入图片描述

在这里插入图片描述

cd /usr/include/ grep “struct sockaddr_in {” * -nir

地址转换API
int inet_aton(const char* straddr,struct in_addr *addrp);
//把字符串形式的“192.168.1.123”转为网络能识别的格式

char* inet_ntoa(struct in_addr inaddr); 
//把网络格式的ip地址转为字符串形式

3.监听

#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>   
int listen(int sockfd, int backlog);

在这里插入图片描述

4.连接

#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

在这里插入图片描述

5.数据收发

在这里插入图片描述

另一套API
在这里插入图片描述

客户端的connect函数

#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值