操作系统 | 网络编程

本文详细介绍了网络通信结构,包括Socket网络通信与IPC机制,重点阐述了客户服务器模型和套接字编程模型。通过具体实例解析了因特网连接(TCP连接),并探讨了套接字地址设置,如IP地址、因特网域名及字节序转换。同时,讲解了网络通信API函数的使用,包括客户端、服务器端的数据收发。
摘要由CSDN通过智能技术生成

网络编程

1. 网络通信结构

1.1 Socket网络通信与IPC机制

  • IPC

消息队列、共享内存、IPC信号量

结构麻烦、不易使用、仅用于同机进程间通信

  • Socket网络通信

标准、规范,基于TCP/IP协议

两种模式:TCP通信(与管道类似)、UDP通信(与消息队列类似)

易于理解、使用,使用广泛

既可用于单机进程间通信,也可用于不同计算机进程间通信

1.2 客户服务器模型

  • 与网络通信一般采取客户服务器模型

在这里插入图片描述

1.3 网络通信结构

  • 分层设计
  • 各层分工明确
  • 可靠性好,性能高

在这里插入图片描述

1.4 套接字编程模型

结构:网卡、TCP协议、套接字(Socket)

类比:网卡(单位门牌号)、TCP/IP协议(收发室)、套接字(信箱号)

套接字:含有进程接收信息的完整地址(Socket地址:IP地址、端口号)

在这里插入图片描述

1.5 因特网连接(TCP连接)

TCP连接:比喻连接通信双方套接字的一条通信线路,通信前建立,通信结束拆除

一条TCP连接实际上就是一个文件描述

可用read/write或send/recv进行数据收发

地址:(cliaddr:cliport, servaddr:servport)
在这里插入图片描述

1.6 因特网连接实例

服务器端口号:规定为80

客户端端口号:随机分配,12345

在这里插入图片描述

2. 套接字地址设置

2.1 地址结构

/* Intenet-style socket address structure */

struct sockaddr_in

{
   

  short sin_family; //指定地址家族即地址格式

  unsigned short sin_port; //端口号码

  struct in_addr sin_addr; //IP地址

  char sin_zero[8]; //需要指定为0

};

在这个结构中,成员sin_family指定使用该套接字地址的地址家族。在这里必须设置为AF_INET,表示程序所使用的地址家族是TCP/IP。

注意:该结构的最后一个成员并未实际使用,主要是为了与第一个版本的套接字地址结构大小相同而设置。在实际使用时,将这8个字节直接设为0即可。

struct sin_addr {
   

  unsigned int s_addr; /*network byte order (big-endian)  */

}; 
2.1.1 字节序

整数:unsigned int B[2]={0x12345678,0xabcdef},

void A=(void) B;

unsigned int *K=(int *)malloc(sizeof(int));

*K=0x12345678;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BK8EzXP9-1590747953341)(F:\markdown\网络编程\1590714503(1)].jpg)

2.1.2 主机序、网络序转换
/*host to network long*/
unsigned long int htonl(unsigned long int hostlong);

/*主机字节序转化为网络字节序*/
unsigned short int htons(unsigned short int hostshort);

返回:按照网络字节顺序的值。

unsigned long int ntohl(unsigned long int netlong);

unsigned short int ntohs(unsiged short int netshort); 

h:host

n:network

l:long, int,4字节

s: short, 2字节

#include "wrapper.h"
int main(){
   
	unsigned int m,n; unsigned short k;	char *a,*b,*c;
	m=0x12345678; n=htonl(0x12345678); 
	a=(char*)&m;  b=(char*
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值