-
网络通信简介
1
Socket
概述
< br>提到网络通信,我们不得不提下网络通信里面一个很重要的概念——
Socket
。
1.1
Socket
(套接字)的概念——什么是
socket
socket
的英文原义是
“
孔
”
或
“
插座
”
。作为
< br>4BDS UNIX
的进程通信机制,取后一种意思。通
常也称作
套接字
,用于描述
IP
地址和端口,是一个通信链的句柄。被用于解
决不同主机的进
程间通讯问题。后在网络软件中被广泛应用于
T
CP/IP
网络,成为开发网络应用软件的强有力工
具。
SOCKET
接口定义了许多函数,
程序员可以用直接用它们来开发网络应用程序。
最早美国加州
大学
Berkeley
分校在
UNIX
下为
TCP/IP
协议研发了一个
p>
API
,
这个
AP
I
就是
著名的
Berkeley So
cket
接口
(
套接字
)
。
在桌面操作系统进入视窗系统时代后,
仍然继承了
Socket
方法。在
TCP/IP
网络通信环境下,
Socket
数据传输是一种特别的
I/O
,他也相当于一种
文件描
述符,具有一个类似于打开文件的函数调用
-socke
t()
。能这样理解:
Socket
实
际上是个通信端
点,通过他,用户的
Socket
程式能通过网络和其他的
Socket
应用程式通信
。
Socket
存在于一
个
通信域
为描述一般的线程
怎么通过
Socket
进行通信而引入的一种抽象概念
)
里,
并且和另一
个域
的
Socket
交换数据。
1.2 Windows
Sockets(Winsock)
以
U.C.
Berkeley
大学
BSD
UNIX
中流行的
Socket
接口为范例定义了一套
microsoft
Win
dows
下网络编程接口。它不仅包含了人们所熟悉的
Berk
eley
Socket
风格的库函数;也包
< br>含了一组针对
Windows
的扩展库函数,以使程序员
能充分地利用
Windows
消息驱动机制进行
编程。
2
网络通信的基础
建立网络间的通信我
们需要知道些什么?首先回到咱们日常生活中的通信,
我们通信的
话肯定需要对方的地址,
然后通过邮局才能给对方写信;
再比
如我们打电话,
就需要对方的
电话号码,
然后服务商才能给你们通信的双方建立连接。
在网络通信中,
充当这一识别功能
的就是
IP
地址和端
口。详情可参看:
《
c
语言也能干大事
》的
SOCKET
网络通信的介绍。
2.1
基本知识
2.1.1
主
机字节序和网络字节序
主机字节序:
即内存中存储字节的方法,
有高位字
节优先和低位字节优先。
不同的操作
系统实现方式不同。
网络字节序:网络协议中处理多字节的的顺序,统一采用高位字节优
先顺序。
主机字节序和网络字节序转换的函数:
#include
uint16_t htons(uint16_t <16
位的主机字节序
>)
uint32_t htonsl(uint32_t <32
位的主机字节序
>)
//
转换为网络字节序
uint16_t ntohs(uint16_t <16
位的网络字节序
>)
uint32_t ntohl(uint32_t <32
位的网络字节序
>)
//
转换为主机字节序
2.1.2
缓冲区
每个
TCP
SOCKET
都有一个发送缓冲区和一个接收缓冲区,
TCP
具有流量控制,所以
接收缓冲区的大小就是通知另一端的窗口的大小,对方不
会发大于该窗口大小的数据;而
UDPSOCKET
只有一个
接收缓冲区无流量控制,当接收的数据报溢出时就会被丢弃
2.1.3
通信域(地址簇)
套接字存在于特定
的通信域
(
即地址族
)
中,只有隶属于同一地址族的套接字才能建立对
话。常有以下几种类型:
Linux
支持
AF_INET(IPv4
协议
)
、
AF_INET6(IPv6
协议
)
、
AF_LOCAL(Unix
域协议
)
。
2.1.4
套
接口类型
有以下三种:
字节流套接口
(SOCK_STREAM)
:提供了一个面向连接、可靠的数据传输服
务。
数据报套接口
(SOCK_DG
RAM)
:提供了一个无连接服务。
原始套接口
(SOCK_RAW)
:该接口允许对较低层协议,
如
IP
、
ICMP
直接访问。
AF_INET
和<
/p>
SOCK_STREAM
的组合对应
TC
P
协议;
AF_INET
和
SOCK_DGRAM
的组合对应
UDP
协议;
AF_INET
和
SOCK_RAW
的组合对应
IP
v4
协议。
2.1.5
端
口
是整数
型标识符,是操作系统可分配的一种资源,用于操作系统标识通讯进程,
。在
TCP/IP
传输层的两个协议
TCP
和
UDP
是完全独立的两个软件模块,因此各自的
端口号也相
互独立,如
TCP
有一个<
/p>
255
号端口,
UDP
< br>也可以有一个
255
号端口,二者并不冲突。
2.1.6
TCP/UCP
TCP
:面向连接的传输。
UDP
:无连接的传输。
2.2
套接口(
SOCKET
)思想
套接口就是网络连接的一端的
IP
地
址和端口号的二元组。即套接口
(socket)
=网络
地址
+
端口号。其中,网络地址用于定位主机
,端口用于定位进程
ID
。
p>
在网络连接中,连接双方两个端点所组成的五元组(即通讯协议、本地
IP
、本地
PORT
、远程
IP
和远程
PORT
)称为
socket
pair
,该五元组唯一的标识了一个网络连接。
通信的两个进程间相互作用的主要模式是客户
/
服务器模式
(
Client
/Server model
)
,
即客
户向服务器发出服务请求,服务器接收到请求后,提供相应的服务。
2.2.1
服务器端操作步骤
?
打开一监听通道并通知客户机,服
务器愿意在某一公认端口上接收客户请求。
?
等待客户请求到达该端口后,建立
专用的数据传输通道,原监听通道继续监听。
?
数据通道传输数据。
?
关闭服务器。
2.2.2
客户端操作步骤
?
打开一通信通道,并连接到服务器所在主机的特定端口。
?
向服务器发服务请求报文,等待并
接收应答;继续提出请求
......
?
请求结束后关闭通信通道并终止。
2.2.3
特征
?
客户与服务器进程的作用是非对称的,因此编码不同。
?
服务进
程一般是先于客户请求而启动的。只要系统运行,该服务进程一直存在,
直到正常或强迫
终止
3
典型过程图
3.1
无连接协议的套接字调用时序图
(UCP)
3.2
面向连接的套接字的系统调用时序图
(TCP)
3.3
面向连接的应用程序流程图
4
代码流程
//
加载套接字库
#include
#include
还需要添加链接库<
/p>
ws2_(
工程
=
设置
=
链接
=
对象
/
库模块
)
WORD wVersionRequested;
//
准备加载
Winsock
库的版
本
,
注意高字节是副版本号
WSADATA wsaData;
//
是一个返回值,指向
WSADATA
结构的指针,
WSAStartup
函数将其加
载
的库版本信息输入到这个结构体中。
int err;
wVersionRequested =
MAKEWORD(1,1);
-
-
-
-
-
-
-
-
-
上一篇:八年级上册英语单词、词组表(全)
下一篇:八年级上册英语单词表【十篇】