网络编程----网络编程概述[1]

1.Socket Api 版本:

在Windows平台上主要有两个版本的Socket Api函数:

WinSock 1.1 和 WinSock 2.2,2.2版本默认兼容1.1版本,

1.1 winsock.h wsock32.lib winsock.dll

2.2 winsock2.h ws2_32.lib ws2_32.dll

 

2.0版本的Socket比1.1的多了一些高级的功能,如:

多重协议支持:通过SPI接口支持其他协议;

多重命名空间:根据服务与主机名选择协议;

重叠I/O模式:增强I/O吞吐量与提高性能;

分散与聚合:从多个缓冲区发送与接收数据;

有条件接受:有选择性地决定是否接受连接;

套接字共享:多个进程共享一个套接字句柄。

 

一般大家看到的WSA开头的都是WinSock2.2新增的函数。

2.Socket套接字类型:

比较常用的包括:流式套接字(使用TCP),数据报套接字(使用UDP),原始套接字等等。

TCP与UDP各有优缺点:

TCP:面向连接、稳定、需要资源多;

UDP:面向无连接(一般情况下)、不稳定、需要资源少。

 

用手机打电话时面向连接的,用手机发短信是面向无连接的,目前来说网络上比较常用的是TCP类型的套接字。

本教程中也使用TCP Socket类型。

 

TCP与UDP的区别

  1. 基于连接与无连接
  2. 对系统资源的要求(TCP较多,UDP少)
  3. UDP程序结构较简单
  4. 流模式(TCP)与数据报模式(UDP)
    TCP保证数据正确性,UDP可能丢包
    TCP保证数据顺序,UDP不保证

具体编程时的区别

  1. socket()的参数不同
  2. UDP Server不需要调用listen和accept
  3. UDP收发数据用sendto/recvfrom函数
  4. TCP:地址信息在connect/accept时确定
    UDP:在sendto/recvfrom函数中每次均 需指定地址信息
  5. UDP:shutdown函数无效

部分满足以下几点要求时,应该采用UDP 面向数据报方式

  1. 网络数据大多为短消息
  2. 拥有大量Client
  3. 对数据安全性无特殊要求
  4. 网络负担非常重,但对响应速度要求高

 

TCP Socket通信流程:

网络编程----网络编程概述[1]

TCP是面向连接的,UDP是面向无连接的。

3.TCP 类型 Socket 程序开发流程:

TCP服务端:WSASartup、socket、bind、listen、accept、read、write、closesocket、WSACleanup。

TCP客户端:WSASartup、socket、connect、read、write、closesocket、WSACleanup。