Windows 网络通信套接字技术

一、TCP/IP介绍

1、TCP/IP体系结构

TCP/IP协议实际上就是在物理网上的一组完整的网络协议。其中TCP是提供传输 层服务,而IP则是提供网络层服务。TCP/IP协议包括如下协议,其结构如图所示。

在这里插入图片描述
IP: 网间协议(Internet Protocol) 负责主机间数据的路由和网络上数据的存储。 同时为ICMP,TCP,UDP提供分组发送服务。用户进程通常不需要涉及这一层。

ARP: 地址解析协议(Address Resolution Protocol),此协议将网络地址映射 到硬件地址。

RARP:反向地址解析协议(Reverse Address Resolution Protocol),此协议 将硬件地址映射到网络地址。

ICMP:网间报文控制协议(Internet Control Message Protocol),此协议处理 信关和主机的差错和传送控制。

TCP:传送控制协议(Transmission Control Protocol),这是一种提供给用户 进程的可靠的全双工字节流面向连接的协议。它要为用户进程提供虚电路服务, 并为数据可靠传输建立检查。
UDP:用户数据报协议(User Datagram Protocol),这是提供给用户进程的无 连接协议,用于传送数据而不执行正确性检查。
FTP:文件传输协议(File Transfer Protocol),允许用户以文件操作的方式
(文件的增、删、改、查、传送等)与另一主机相互通信。
SMTP:简单邮件传送协议(Simple Mail Transfer Protocol),SMTP协议为系 统之间传送电子邮件。

TELNET:终端协议(Telnet Terminal Procotol),允许用户以虚终端方式访问 远程主机。

HTTP:超文本传输协议(Hypertext Transfer Procotol)。

TFTP:简单文件传输协议(Trivial File Transfer Protocol)。

2、TCP/IP特点

TCP/IP协议的核心部分是传输层协议(TCP、UDP)、网络层协议(IP)和物理 接口层,这三层通常是在操作系统内核中实现,因此用户一般不涉及。编程时, 编程界面有两种形式:

第一种是由内核心直接提供的系统调用;

第二种是使用以库函数方式提供的各种函数。前者为核内实现,后者为核外实现。 用户服务要通过核外的应用程序才能实现,所以要使用套接字(socket)来实现。 TCP/IP协议核心与应用程序关系如图所示。
在这里插入图片描述

3、TCP/IP协议与WinSock网络编程接口的关系

WinSock并不是一种网络协议,它只是一个网络编程接口,也就是说,它不是协议,但是它可以访问很多种网络协议,可以把它当作一些协议的封装。现在的
WinSock已经基本上实现了与协议无关。可以使用WinSock来调用多种协议的功能。 那么,WinSock和TCP/IP协议到底是什么关系呢?实际上,WinSock就是TCP/IP
协议的一种封装,可通过调用WinSock的接口函数来调用TCP/IP的各种功能。

二、套接字原理

1、客户机/服务器模式

在TCP/IP网络中两个进程间的相互作用的主机模式是客户机/服务器模式
(Client/Server model)。该模式的建立基于以下两点:
第一,非对等作用;
第二,通信完全是异步的。

客户机/服务器模式在操作过程中采取的是主动请示方式:

服务器端:

首先服务器方要先启动,并根据请示提供相应服务,过程如下:

  • 打开一通信通道并告知本地主机,它愿意在某一个公认地址上接收-客户请求;
  • 等待客户请求到达该端口;
  • 接收到重复服务请求,处理该请求并发送应答信号;
  • 返回第二步,等待另一客户请求;
  • 关闭服务器。
客户端:
  • 打开一通信通道,并连接到服务器所在主机的特定端口;
  • 向服务器发送服务请求报文,等待并接收应答;继续提出请求……;
  • 请求结束后关闭通信通道并终止。

2、基本套接字

为了更好说明套接字编程原理,这里介绍几个基本的套接字。

  1. 创建套接字——socket()
    功能:使用前创建一个新的套接字。
    格式:SOCKET PASCAL FAR socket(int af,int type,int procotol);
    参数:af:通信发生的区域
    type:要建立的套接字类型
    procotol:使用的特定协议
  2. 指定本地地址——bind()
    功能:将套接字地址与所创建的套接字号联系起来。
    格式:int PASCAL FAR bind(SOCKET s,const struct sockaddr FAR * name,int namelen);
    参数:s是由socket()调用返回的并且未作连接的套接字描述符(套接字号)。
    其它:没有错误,bind()返回0,否则SOCKET_ERROR。
    在这里插入图片描述
  3. 建立套接字连接——connect()和accept()
    功能:共同完成连接工作。
    格式:int PASCAL FAR connect(SOCKET s,const struct sockaddr FAR * name,int namelen);
    SOCKET PASCAL FAR accept(SOCKET s,struct sockaddr FAR *name,int FAR * addrlen);
    参数:同上
  4. 监听连接——listen()
    功能:用于面向连接服务器,表明它愿意接收连接。
    格式:int PASCAL FAR listen(SOCKET s, int backlog);
  5. 数据传输——send()与recv()
    功能:数据的发送与接收。
    格式:int PASCAL FAR send(SOCKET s,const char FAR * buf,int len,int flags);
    int PASCAL FAR recv(SOCKET s,const char FAR * buf,int len,int flags);
    参数:buf指向存有传输数据的缓冲区的指针。
  6. 多路复用——select()
    功能:用来检测一个或多个套接字状态。
    格式:int PASCAL FAR select(int nfds,fd_set FAR * readfds,fd_set FAR * writefds, fd_set FAR * exceptfds,const struct timeval FAR * timeout);
    参数:readfds指向要做读检测的指针
    writefds指向要做写检测的指针
    exceptfds指向要检测是否出错的指针
    timeout为最大等待时间
  7. 关闭套接字——closesocket()
    功能:关闭套接字s。
    格式:BOOL PASCAL FAR closesocket(SOCKET s);

3、典型过程图

  1. 面向连接(基于TCP)socket 编程
    为了实现服务器与客户机的通信,服务器和客户机都必须建立套接字。服务器 与客户机的工

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆萌宝儿姐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值