写聊天室之前 了解聊天室拓展出来的各种知识点

TCP:并发服务器 效率最高 多线程

UDP:循环服务器 不需要listen accept connect

Select(多路复用): 循环服务器

 

网络编程注意点:

TCP/IP 四层模型 { 应用层,传输层,网络层,网络接口层 }

背三次握手四次挥手

DHCP协议是什么?

 

套接字 有三种:

  1. TCP 流套接字 sock_stream
  2. UDP 数据报套接字 sock_dgram
  3. 原始套接字

 

服务器有什么?

  1. IP 用以在局域网中 找到你的电脑(你就理解成定位系统)
  2. 端口号 找到对应的软件(比如是发消息给你的电脑 哪个程序来接受消息?

QQ/微信/SKAPE)

 

Bind / accept 等的第二个参数 需要加强制转换类型

第二个参数 的结构原型:

Struct sockaddr

{

U_short sa_family; //地址族协议

Char sa_data[14]; //存放ip 与 端口号

};

 

有关端口号: 1-65535 (x shell 中 connecting to 192.168.128.91  :  22这里的22就是端口号)

1-1023 一般不用 被各种协议 占用了

(1)知名端口(Well-Known Ports)

知名端口即众所周知的端口号,范围从0到1023,这些端口号一般固定分配给一些服务。比如21端口分配给FTP服务,25端口分配给SMTP(简单邮件传输协议)服务,80端口分配给HTTP服务,135端口分配给RPC(远程过程调用)服务等等。

(2)动态端口(Dynamic Ports)

动态端口的范围从1024到65535,这些端口号一般不固定分配给某个服务,也就是说许多服务都可以使用这些端口。只要运行的程序向系统提出访问网络的申请,那么系统就可以从这些端口号中分配一个供该程序使用。比如1024端口就是分配给第一个向系统发出申请的程序。在关闭程序进程后,就会释放所占用的端口号。

 

然后 这个结构慢慢演变了

Struct sockadddr_in

{

Short int sin_family; //internet 地址族

Unsigned short sin_port; //端口号 (自己要指定)

Struct in_addr sin_addr; //IP地址

Unsigned char sin_zero[8]; //填0

};

 

这里就又涉及到一个知识点:大小端的转换

内存中分为 高地址 和 低地址

而数据又有 高字节 和 低字节

大端:高字节存放在低地址中

小端:低字节存放在低地址中

一般

小端:主机的字节序

大端:网络的字节序

(遇到相关问题和题目 注意平台与电脑键的转换)

 

有关大小端的转换:

Int  a  =  1;

A & 0x000000ff << 24  |

A & 0x0000ff00 << 8   |

A & 0x00ff0000 >> 8   |

A & 0xff000000 >>24

将A的左右移位完成大小端的转化

 

Htonl:(在#include <arpa/inet.h> 头文件中)

H:host 主机

To:

N:网络

L:两个字节 32位

S:一个字节 16位

 

猜你喜欢

转载自blog.csdn.net/qq_38313246/article/details/81484762