一、TCP与UDP的区别
1、UDP通信开始前不需要建立链接,只需要发送数据,类似于写信的模式、不稳定、但是因为不用链接所以速度快一点
2、TCP通信开始前需要先建立联系,完之后才可以发送数据,类似打电话模式、稳定、但要慢一点、web服务器一般使用这个协议
二、TCP通信过程
1、流程图
2、服务器
- 创建一个套接字(一般为主动套接字)-----》买手机
- 绑定IP和端口号-------》插卡
- 监听(将主动变被动)----------》设置为外音有信息可听到
- 接收请求---------------------------》等信息准备接听
3、客户端
- 创建套接字
- 链接-------》打电话
三、TCP服务器
1、简单服务器搭建:
#coding=utf-8
from socket import *
# 创建套接字,网络连接,TCP
serverSocket = socket(AF_INET, SOCK_STREAM)
# 绑定本地信息
address = ('', 8000)
serverSocket.bind(address)
# 使⽤socket创建的套接字默认的属性是主动的,使⽤listen将其变为被动的,这样就可以接收别⼈的链接了,设置5个
serverSocket.listen(5) # 如果有新的客户端来链接服务器,那么就产⽣⼀个新的套接字专⻔为这个客户端服务器 这个可以开启5个
# newSocket⽤来为这个客户端服务,serverSocket就可以省下来专⻔等待其他新客户端的链接 ----类似于一个号码可以转接客服
newSocket, clientAddr = serverSocket.accept()
# 接收对⽅发送过来的数据,最⼤接收1024个字节
recvData = newSocket.recv(1024)
print ('接收到的数据为:',recvData )# 发送⼀些数据到客户端
newSocket.send("thank you !") # 关闭为这个客户端服务的套接字,只要关闭了,就意味着为不能再为这个客户端服务了,如果还需要服务,只能再次重新连接
newSocket.close() # 关闭监听套接字,只要这个套接字关闭了,就意味着整个程序不能再接收任何新的客户端的连接
serverSocket.close()
四、客户端
1、简单构建
#coding=utf-8
from socket import *
# 创建socket
clientSocket = socket(AF_INET, SOCK_STREAM)
# 链接服务器
serAddr = ('192.168.1.102', 8000) #ip需要运行客户端查询端口自己设置
clientSocket .connect(serAddr)
# 提示⽤户输⼊数据
sendData = raw_input("请输⼊要发送的数据:")
clientSocket .send(sendData.encode("gb2312"))
# 接收对⽅发送过来的数据,最⼤接收1024个字节
recvData = clientSocket .recv(1024)
print('接收到的数据为:',recvData )
# 关闭套接字
clientSocket .close()