基于TCP和UDP的Socket编程
在OSI的各层所使用的协议: 1.应用层:telnet,FTP,HTTP,DNS,SMTP,POP3 2.传输层:TCP,UDP TCP:面向连接的可靠的传输协议,通信前建立三次握手,握手成功后才能通信,对数据准确性要求较高的场合使用,如从网上载的安装文件,不能缺少任何信息 UDP:是无连接的
在OSI的各层所使用的协议:
1.应用层:telnet,FTP,HTTP,DNS,SMTP,POP3
2.传输层:TCP,UDP
TCP:面向连接的可靠的传输协议,通信前建立三次握手,握手成功后才能通信,对数据准确性要求较高的场合使用,如从网上载的安装文件,不能缺少任何信息
UDP:是无连接的,不可靠的传输协议,不需要建立连接,也没有重传和确认的机制,在实时性要求较高,但对数据准确度要求不是很高的场合使用,如视频会议,在线观看电影,当中丢失个别数据包并不影响整体的效果。
3.网络层:IP
1.应用层:telnet,FTP,HTTP,DNS,SMTP,POP3
2.传输层:TCP,UDP
TCP:面向连接的可靠的传输协议,通信前建立三次握手,握手成功后才能通信,对数据准确性要求较高的场合使用,如从网上载的安装文件,不能缺少任何信息
UDP:是无连接的,不可靠的传输协议,不需要建立连接,也没有重传和确认的机制,在实时性要求较高,但对数据准确度要求不是很高的场合使用,如视频会议,在线观看电影,当中丢失个别数据包并不影响整体的效果。
3.网络层:IP
因为OSI七层结构较为复杂,所以使用较多的是TCP/IP模型,现在TCP/IP已经成为Internet上通用的工业标准
TCP/IP模型包括4个层次:应用层,传输层,网络层,网络接口
端口:
1. 为了标识通信实体中进行通信的进程(应用程序),TCP/IP协议提出了协议端口的概念
2. 端口是一种抽象的软件结构(包括一些数据结构和I/O缓冲区)。应用程序通过系统调用和某端口建立连接(binding)后,传输层传给该端口的数据都被相应的进程所接收,相应进程发给传输层的数据都通过该端口输出
3. 端口用一个整数型标识符来表示,即端口号。端口号跟协议相关,TCP/IP传输层的两个协议TCP和UDP是完全独立的的两个软件模块,因此各自的端口号也相互独立
4. 端口使用一个16位的数字来表示,它的范围是0~65535,1024以下的端口号保留给预定义的服务,例如,http使用80端口
套接字(Socket)
1. Socket的出现,使得程序员可以很方便的访问TCP/IP,从而开发各种网络应用的程序
2. 套接字存在于通信区域中,通信区域也叫地址族,他是一个抽象的概念,主要用于通过套
TCP/IP模型包括4个层次:应用层,传输层,网络层,网络接口
端口:
1. 为了标识通信实体中进行通信的进程(应用程序),TCP/IP协议提出了协议端口的概念
2. 端口是一种抽象的软件结构(包括一些数据结构和I/O缓冲区)。应用程序通过系统调用和某端口建立连接(binding)后,传输层传给该端口的数据都被相应的进程所接收,相应进程发给传输层的数据都通过该端口输出
3. 端口用一个整数型标识符来表示,即端口号。端口号跟协议相关,TCP/IP传输层的两个协议TCP和UDP是完全独立的的两个软件模块,因此各自的端口号也相互独立
4. 端口使用一个16位的数字来表示,它的范围是0~65535,1024以下的端口号保留给预定义的服务,例如,http使用80端口
套接字(Socket)
1. Socket的出现,使得程序员可以很方便的访问TCP/IP,从而开发各种网络应用的程序
2. 套接字存在于通信区域中,通信区域也叫地址族,他是一个抽象的概念,主要用于通过套
接字通信的进程的共有特性综合在一起。套接字通常只与同一个区域的套接字交换数据。
套接字的类型
1. 流式套接字(SOCK_STREAM)
提供面向连接的,可靠的数据传输服务,数据无差错,无重复的发送,且按发送的顺序接收,基于TCP协议
2. 数据保式套接字(SOCK_DGRAM)
提供无连接的服务,数据包以独立包形式发送,不提供无错误的保证,数据可能丢失或重复,且接收顺序混乱,基于UDP协议
套接字的类型
1. 流式套接字(SOCK_STREAM)
提供面向连接的,可靠的数据传输服务,数据无差错,无重复的发送,且按发送的顺序接收,基于TCP协议
2. 数据保式套接字(SOCK_DGRAM)
提供无连接的服务,数据包以独立包形式发送,不提供无错误的保证,数据可能丢失或重复,且接收顺序混乱,基于UDP协议
基于TCP(面向连接)的Socket编程
服务器端顺序:
1. 加载套接字库
2. 创建套接字(socket)
3. 将套接字绑定到一个本地地址和端口上(bind)
4. 将套接字设为监听模式,准备接收客户请求(listen)
5. 等待客户请求的到来;当请求带来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept)
6. 用返回的套接字和客户端进行通信(send/recv)
7. 返回,等待另一个客户请求
8. 关闭套接字(closesocket)
客户端程序:
1. 加载套接字库
2. 创建套接字(socket)
3. 向服务器发送连接请求(connect)
4. 和服务器端进行通信(send/receive)
5. 关闭套接字(closesocket)
6. 用返回的套接字和客户端进行通信(send/recv)
7. 返回,等待另一个客户请求
8. 关闭套接字(closesocket)
客户端程序:
1. 加载套接字库
2. 创建套接字(socket)
3. 向服务器发送连接请求(connect)
4. 和服务器端进行通信(send/receive)
5. 关闭套接字(closesocket)
基于UDP(面向无连接)的socket编程
服务器端(接收端)程序:
1. 加载套接字库 socket通信在哪一层
2. 创建套接字(socket)
3. 将套接字绑定到一个本地地址和端口上(bind)
4. 等待接收数据(recvfrom)
5. 关闭套接字(closesocket)
客户端(发送端)程序
1. 加载套接字库
2. 创建套接字(socket)
3. 向服务器发送数据(sendto)
4. 关闭套接字(closesocket)
3. 将套接字绑定到一个本地地址和端口上(bind)
4. 等待接收数据(recvfrom)
5. 关闭套接字(closesocket)
客户端(发送端)程序
1. 加载套接字库
2. 创建套接字(socket)
3. 向服务器发送数据(sendto)
4. 关闭套接字(closesocket)
创建基于TCP协议的CS程序的Server端所涉及的相关函数说明(按使用的先后顺序排列):
1. int WSAStartup(WORD wVersionRequested,LPWSADATA lpWSAData):作用是加载套接字库和进行套接字库的版本协商
a. 参数wVersionRequested:用于指定准备加载的Winsock库的版本,高位字节指定所需要的Winsock库的副版本,低位字节则是主版本,可用MAKEWORD(X,Y)(其中,x为高位字节,
y为低位字节)方便获得wVersionRequested的正确值。
b. 参数lpWSAData:指向WSADATA结构的指针,WSAStartup用其加载的库版本有关的信息填在这个结构中
b. 参数lpWSAData:指向WSADATA结构的指针,WSAStartup用其加载的库版本有关的信息填在这个结构中
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论