TCP和UDP网络编程
1.通信协议介绍
(1)定义:网络通信协议是一种网络通用语言,为连接不同操作系统和不同硬件体系结构的互联网络引提供通信支持,是一种网络通用语言。
(2)网络通信协议由三个要素组成。
语义,解释控制信息每个部分的意义。它规定了需要发出何种控制信息,以及完成的动作与做出什么样的响应。
语法,用户数据与控制信息的结构与格式,以及数据出现的顺序。
时序,对事件发生顺序的详细说明。
可以形象地把这三个要素描述为:*语义表示要做什么,语法表示要怎么做,时序表示做的顺序。
(3)常见协议
常见的网络通信协议有:TCP/IP协议、IPX/SPX协议、NetBEUI协议等。
TCP/IP参考模型是首先由ARPANET所使用的网络体系结构,共分为四层:网络接口层(又称链路层)、网络层(又称互联层)、传输层和应用层,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
2.TCP协议和UDP协议
TCP协议建立在IP协议之上,TCP协议负责两台计算机之间建立连接,保证数据包按顺序到达,TCP协议会通过握手建立连接,然后对每个IP包编号,确保对方按顺序收到,就自动重发。
许多常用更高级的协议都是建立在TCP协议基础上,例如用于浏览器的HTTP协议,发送邮件的SMTP协议;
UDP协议通用建立在IP协议上,但是UDP协议买你想无连接的通信协议,不保证数据报的顺利到达,是不可靠传输,所以效率比TCP更高。
小结TCP与UDP的区别:
1.基于连接与无连接;
2.对系统资源的要求(TCP较多,UDP少);
3.UDP程序结构较简单;
4.流模式与数据报模式 ;
5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。
3.Socket(套接字)
所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议根进行交互的接口。
Socket(套接字)可以看成是两个网络应用程序进行通信时,各自通信连接中的端点,这是一个逻辑上的概念。它是网络环境中进程间通信的API(应用程序编程接口),也是可以被命名和寻址的通信端点,使用中的每一个套接字都有其类型和一个与之相连进程。通信时其中一个网络应用程序将要传输的一段信息写入它所在主机的 Socket中,该 Socket通过与网络接口卡(NIC)相连的传输介质将这段信息送到另外一台主机的 Socket中,使对方能够接收到这段信息。 Socket是由IP地址和端口结合的,提供向应用层进程传送数据包的机制
4.TCP简单网络编程
案例:编写一个简单的TCP服务器程序,他接收客户端连接,把客户端发过来的字符串加上“hello”再重新发过去。
完整的TCP服务端程序如下:
import socket
import time
import threading #导入threading线程模块
def tcplink(sock,addr):
print('接受一个来自%s:%s连接请求'%addr)
sock.send(b'welcome!')
while True:
data=sock.recv(1024)
time.sleep(1)
if not data or data.decode('utf-8')=='exit':
break
sock.send(('hello %s!'% data.decode('utf-8')).encode('utf-8'))
sock.close(