python编程快速上手(持续更新中…)
目标
tcp 3次握手
Tcp为什么是可靠链接
Tcp与udp区别
简介
TCP 面向连接、可靠的、基于字节流的传输控制协议
tcp 3次握手
TCP的特点2
- 面向连接
- 可靠传输4
- 应答机制
- 超时重传
- 错误校验
- 流量阻塞(管控)
Tcp与udp区别
面向连接(三次握手)
数据有序传输
重发丢失数据包
舍弃重复数据包
无差错的数据包
阻塞和流量控制
tcp客户端
实现步骤:
1.导入模块
2.创建套接字
3.建立连接:
tcp_client_socket.connect((‘127.0.0.1’, 8080))
4.发送数据
tcp_client_socket.send(‘你好!’.encode())
5.接收数据
recv_data = tcp_client_socket.recv(1024)
recv_text = recv_data.decode(‘gbk’)
print(recv_text)
6.关闭连接
import socket
# 发送数据
tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 建立连接
tcp_client_socket.connect(('127.0.0.1', 8080))
# 发送数据
tcp_client_socket.send('约吗?'.encode())
# 获取数据-阻塞
# 服务端回复的二进制
recv_data = tcp_client_socket.recv(1024)
recv_text = recv_data.decode('gbk')
print(recv_text)
# 关闭
tcp_client_socket.close()
tcp服务端
-
开启监听(把套接字由主动设置为被动模式)
tcp_server_socket.listen(128) 最大允许128个连接
-
等待客户端连接
new_client_socket,client_ip_port = tcp_server_socket.accept()
import socket
# 创建套接字
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定ip和端口
tcp_server_socket.bind(('', 8080))
# tcp监听,被动
# 128 最大连接数 windows 有效 linux无效
tcp_server_socket.listen(128)
# 等到连接
# 解决阻塞,继续往下执行
# 两部分: 返回一个新的套接字socket对象 客户端ip与端口元组
new_client_socket, clinet_ip_port = tcp_server_socket.accept()
print('新客户端来啦', str(clinet_ip_port))
# 收发数据
recv_data = new_client_socket.recv(1024);
recv_text = recv_data.decode('gbk')
print("接收到[%s]的信息:%s" % (str(clinet_ip_port), recv_text))
# 不再接收客户端
new_client_socket.close()
#
tcp_server_socket.close()
tcp服务端-增强版
import socket
# 创建套接字
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定ip和端口
tcp_server_socket.bind(('', 8080))
# tcp监听,被动
# 128 最大连接数 windows 有效 linux无效
tcp_server_socket.listen(128)
# 等到连接
# 解决阻塞,继续往下执行
# 两部分: 返回一个新的套接字socket对象 客户端ip与端口元组
while True:
new_client_socket, clinet_ip_port = tcp_server_socket.accept()
print('新客户端来啦', str(clinet_ip_port))
while True:
# 收发数据
recv_data = new_client_socket.recv(1024);
# 当接收数据为 空 时,表示客户端已经断开连接,服务端也需要断开
# if(len(recv_data)) != 0:
if recv_data:
recv_text = recv_data.decode('gbk')
print("接收到[%s]的信息:%s" % (str(clinet_ip_port), recv_text))
else:
print('客户端已经断开连接…')
break
# 不再接收客户端
new_client_socket.close()
#
tcp_server_socket.close()