Socket 编程

实际上是在进行应用层的编程

应用编程接口API:

通过API完成进程之间通信

 

(图)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(图)

  • 套接字 Socket
  • WINSOCK
  • TLI

 

Socket API

对外:IP地址确定主机地址,端口号确定进程,合起来叫做端点地址,客户机端点地址+服务器端点地址组成套接字,TCP通过套接字完成连接和通信

对内:套接字描述符

(图)

 

WinSock环境下 Socket函数

特有函数由WSA开头

无WSA开头的函数往往在其他系统下也可以使用。

1.WSAStartup 和 WSACleanup

这是由于TCP是一种面向连接的传输层协议,在使用协议之前必须建立TCP连接,传输完数据后必须释放连接。

/* 第一个参数代表调用版本,第二个参数返回实际版本信息*/
int WSAStartup (WORD wVersionRequested, LPWSADATA IpWSAData);

...

/*完成对Socket库的调用后调用
 *解除与Socket库的绑定
 *释放Socket库所占用的系统资源
 */
int WSACleanup (void);

 

2.Socket

传入参数创建套接字,创建成功会返回套接字描述符

/*第一个参数表明面向哪种协议,protofamily = PF_INET
 *第二个参数请求返回套接字类型,type = SOCK_STREAM, SOCK_DGRAM , SOCK_RAW
 *第三个参数为协议号,0为默认
 */
sd = socket(protofamily, type, proto);

 

(图)

3.Closesocket / Close

Windows / Linux 上为不同名称

int closesocket(SOCKET sd);

返回值为 0 则成功

 

4. bind

如果套接字在创建的时候,还没绑定地址信息,可以通过该函数绑定本地端点信息。(通常服务端不需要)

 

5.connect

TCP协议下连接远程服务器  ,仅限客户端

 

6.listen

置服务器端TCP套接子为监听模式。并设置队列大小。(仅用于服务端TCP套接字)

 

7.accept

接收/提取一共连接请求,创建新套接字,通过新套接字套接.(仅用于服务端TCP套接字)

 

8.recv

接收数据(用于TCP套接字或连接模式的客户端)

 

解析服务器IP地址

 

(图)

 

通信流程

TCP客户端

  1. 确定服务器IP地址与端口号
  2. 创建套接字,(初始化一共结构体,填入表示初始状态的控制信息)
  3. 分配本地端点地址 (系统自动完成)
  4. 连接服务器(套接字,双方交换控制信息)
  5. 遵循应用层协议通信
  6. 关闭/释放连接

适用:浏览器、邮件等应用程序收发数据

UDP客户端

  1. 确定服务器IP地址与端口号
  2. 创建套接字
  3. 分配本地端点地址 (系统自动完成)
  4. 指定服务器端点地址,构造UDP数据报
  5. 遵循应用层协议通信
  6. 关闭/释放连接

适用:DSN查询、时间查询等收发较短控制数据,或者是流媒体、远程会议、Internet电话等对时延敏感型的任务。

UDP存在的必要性

  1. 可以区分主机进程
  2. 无需建立连接,省去建立连接时间,适合事务性应用
  3. 不做可靠性检测工作,适合对实时性要求比较高而对正确性要求不高的应用
  4. 没有拥塞控制和流量控制,应用能够按照设定速度发送数据。

 

安全性

1.TCP和UDP都没有加密,明文通过互联网传输

2.SSL为TCP提供加密连接

SSL在应用层,应用采用SSL库

SSL socket API 应用通过API将铭文给socket,SSL加密后传输

Https 跑在 SSL + TCP 上

posted on 2022-04-04 16:41  MIXTAPE_208  阅读(56)  评论(0)    收藏  举报

导航