1)建立客户端套接字python
2)发送/接收数据正则表达式
3)关闭套接字编程
from socket import * # 1. 建立udp套接字 udp_socket = socket(AF_INET, SOCK_DGRAM) # 2. 准备接收方的地址 # '192.168.1.103'表示目的ip地址 # 8080表示目的端口 dest_addr = ('192.168.1.103', 8080) # 注意 是元组,ip是字符串,端口是数字 # 3. 从键盘获取数据 send_data = input("请输入要发送的数据:") # 4. 发送数据到指定的电脑上的指定程序中 udp_socket.sendto(send_data.encode('utf-8'), dest_addr) # 5. 关闭套接字 udp_socket.close() 在windows中运行“网络调试助手”
from socket import * # 1. 建立udp套接字 udp_socket = socket(AF_INET, SOCK_DGRAM) # 2. 准备接收方的地址 dest_addr = ('192.168.236.129', 8080) # 3. 从键盘获取数据 send_data = input("请输入要发送的数据:") # 4. 发送数据到指定的电脑上 udp_socket.sendto(send_data.encode('utf-8'), dest_addr) # 5. 等待接收对方发送的数据 recv_data = udp_socket.recvfrom(1024) # 1024表示本次接收的最大字节数 # 6. 显示对方发送的数据 # 接收到的数据recv_data是一个元组 # 第1个元素是对方发送的数据 # 第2个元素是对方的ip和端口 print(recv_data[0].decode('gbk')) print(recv_data[1]) # 7. 关闭套接字 udp_socket.close()
通常状况下,在一台电脑上运行的网络程序有不少,为了避免与其余的网络程序占用同一个端口号,每每在编程中,udp的端口号通常不绑定;可是若是须要作成一个服务器端的程序的话,是须要绑定的。windows
from socket import * # 1. 建立套接字 udp_socket = socket(AF_INET, SOCK_DGRAM) # 2. 绑定本地的相关信息,若是一个网络程序不绑定,则系统会随机分配 local_addr = ('', 7788) # ip地址和端口号,ip通常不用写,表示本机的任何一个ip udp_socket.bind(local_addr) # 3. 等待接收对方发送的数据 recv_data = udp_socket.recvfrom(1024) # 1024表示本次接收的最大字节数 # 4. 显示接收到的数据 print(recv_data[0].decode('gbk')) # 5. 关闭套接字 udp_socket.close()
text = '我是文本'服务器
bytesText = text.encode()网络
bytesText.decode()socket
1)TCP协议,传输控制协议(英语:Transmission Control Protocol,缩写为 TCP)是一种面向链接的、可靠的、基于字节流的传输层通讯协议,由IETF的RFC 793定义。tcp
2)TCP通讯须要通过建立链接、数据传送、终止链接三个步骤。函数
3)TCP通讯模型中,在通讯开始以前,必定要先创建相关的连接,才能发送数据,相似于生活中,"打电话""编码
通讯双方必须先创建链接才能进行数据的传输,双方都必须为该链接分配必要的系统内核资源,以管理链接的状态和链接上的传输。
双方间的数据传输均可以经过这一个链接进行。
完成数据交换后,双方必须断开此链接,以释放系统资源。
这种链接是一对一的,所以TCP不适用于广播的应用程序,基于广播的应用程序请使用UDP协议。
1)TCP采用发送应答机制:TCP发送的每一个报文段都必须获得接收方的应答才认为这个TCP报文段传输成功
2)超时重传:发送端发出一个报文段以后就启动定时器,若是在定时时间内没有收到应答就从新发送这个报文段。
TCP为了保证不发生丢包,就给每一个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。而后接收端实体对已成功收到的包发回一个相应的确认(ACK);若是发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。
3)错误校验:TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。
4) 流量控制和阻塞管理:流量控制用来避免主机发送得过快而使接收方来不及彻底收下。
1)udp不须要建议相关的链接,只须要发送数据
2)tcp在通讯开始以前,必定要先创建相关的连接,才能发送数据
from socket import * # 建立socket tcp_client_socket = socket(AF_INET, SOCK_STREAM) # 目的信息 server_ip = input("请输入服务器ip:") server_port = int(input("请输入服务器port:")) # 连接服务器 tcp_client_socket.connect((server_ip, server_port)) # 提示用户输入数据 send_data = input("请输入要发送的数据:") tcp_client_socket.send(send_data.encode("gbk")) # 接收对方发送过来的数据,最大接收1024个字节 recvData = tcp_client_socket.recv(1024) print('接收到的数据为:', recvData.decode('gbk')) # 关闭套接字 tcp_client_socket.close()
1)socket建立一个套接字
2) bind绑定ip和port
3) listen使套接字变为能够被动连接
4) accept等待客户端的连接
5) recv/send接收发送数据
from socket import * # 建立socket tcp_server_socket = socket(AF_INET, SOCK_STREAM) # 本地信息 address = ('', 7788) # 绑定 tcp_server_socket.bind(address) # 使用socket建立的套接字默认的属性是主动的,使用listen将其变为被动的,这样就能够接收别人的连接了 tcp_server_socket.listen(128) # 若是有新的客户端来连接服务器,那么就产生一个新的套接字专门为这个客户端服务 # client_socket用来为这个客户端服务 # tcp_server_socket就能够省下来专门等待其余新客户端的连接 client_socket, clientAddr = tcp_server_socket.accept() # 接收对方发送过来的数据 recv_data = client_socket.recv(1024) # 接收1024个字节 print('接收到的数据为:', recv_data.decode('gbk')) # 发送一些数据到客户端 client_socket.send("thank you !".encode('gbk')) # 关闭为这个客户端服务的套接字,只要关闭了,就意味着为不能再为这个客户端服务了,若是还须要服务,只能再次从新链接 client_socket.close()
listen后的套接字是被动套接字,用来接收新的客户端的连接请求的,而accept返回的新套接字是标记这个新客户端的
示例:
1) search 能够匹配字符串中的任意位置,只要出现与正则表达式相匹配的表达式就行,group()以后返回匹配成功的部分,只能取第一块符合的
2) findall 相似上一个,返回全部符合的
3) sub 先匹配,而后替换(替换的部分也能够是一个函数)
ret = re.sub(r"\d+", 998, "python = 997")
python=998
import re ret = re.split(r":| ","info:xiaoZhang 33 shandong") print(ret)
输出:
['info', 'xiaoZhang', '33', 'shandong']