一. udp网络程序

1.    udp网络程序-发送数据

1)创建客户端套接字

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中运行“网络调试助手”

2.    发送、接收数据

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()

3.    udp绑定信息

一般情况下,在一台电脑上运行的网络程序有很多,为了不与其他的网络程序占用同一个端口号,往往在编程中,udp的端口号一般不绑定;但是如果需要做成一个服务器端的程序的话,是需要绑定的。

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()

二. Python3编码转换

1.    str->bytes:encode编码

text = '我是文本'

bytesText = text.encode()

2.    bytes->str:decode解码

bytesText.decode()

三. tcp网络程序

1.    概念

1)TCP协议,传输控制协议(英语:Transmission Control Protocol,缩写为 TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。

2)TCP通信需要经过创建连接、数据传送、终止连接三个步骤。

3)TCP通信模型中,在通信开始之前,一定要先建立相关的链接,才能发送数据,类似于生活中,"打电话""

2. 特点

2.1 面向连接

通信双方必须先建立连接才能进行数据的传输,双方都必须为该连接分配必要的系统内核资源,以管理连接的状态和连接上的传输。

双方间的数据传输都可以通过这一个连接进行。

完成数据交换后,双方必须断开此连接,以释放系统资源。

这种连接是一对一的,因此TCP不适用于广播的应用程序,基于广播的应用程序请使用UDP协议。

2.2 可靠传输

1)TCP采用发送应答机制:TCP发送的每个报文段都必须得到接收方的应答才认为这个TCP报文段传输成功

2)超时重传:发送端发出一个报文段之后就启动定时器,如果在定时时间内没有收到应答就重新发送这个报文段。

TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。

3)错误校验:TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。

4) 流量控制和阻塞管理:流量控制用来避免主机发送得过快而使接收方来不及完全收下。

3. 与udp区别

1)udp不需要建议相关的连接,只需要发送数据

2)tcp在通信开始之前,一定要先建立相关的链接,才能发送数据

4. 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()

5.    tcp服务器

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.    匹配单个字符

2.    匹配多个字符

3.    匹配开头结尾

示例:

4.    匹配分组

5.    正则的高级用法

1) search 可以匹配字符串中的任意位置,只要出现与正则表达式相匹配的表达式就行,group()之后返回匹配成功的部分,只能取第一块符合的

2) findall 类似上一个,返回所有符合的

3) sub 先匹配,然后替换(替换的部分也可以是一个函数)

ret = re.sub(r"\d+", 998, "python = 997")

python=998

6.    split

import re

ret = re.split(r":| ","info:xiaoZhang 33 shandong")
print(ret)

输出:

['info', 'xiaoZhang', '33', 'shandong']

06网络通信udp-tcp、正则的更多相关文章

  1. ip/udp/tcp包 学习

    /** * 以太网 */ class Ethernet { static readonly size = 14; get Destination(): string { return [ this.v ...

  2. [转]UDP/TCP穿越NAT的P2P通信方法研究(UDP/TCP打洞 Hole Punching)

     [转]UDP/TCP穿越NAT的P2P通信方法研究(UDP/TCP打洞 Hole Punching) http://www.360doc.com/content/12/0428/17/6187784 ...

  3. 如何计算UDP/TCP检验和checksum

    如何计算UDP/TCP检验和checksum 一.下面的图是一个UDP的检验和所需要用到的所有信息,包括三个部分:1.UDP伪首部2.UDP首部3.UDP的数据部分(切记不要遗漏该部分,否则就~吐血了 ...

  4. Python复习笔记(六)网络编程(udp/tcp)

    一.网络-udp(用户数据报协议) 用户数据报协议 类似写信,不安全,数据有可能丢 1.1 ip地址 注意: IP地址127.0.0.1 ~ 127.255.255.255 用于回路测试 私有ip地址 ...

  5. 【Windows socket+IP+UDP+TCP】网络基础

    Windows Socket+网络      Winsock是 Windows下套接字标准.          Winsock 编程分为UDP[Windows socket + UDP],TCP[Wi ...

  6. 计算机网络基础笔记 运输层协议UDP/TCP

    目录 UDP 首部结构 主要特点 TCP 首部结构 主要特点 TCP 可靠性实现 停止等待ARQ协议 连续ARQ协议&滑动窗口协议 拥塞控制 TCP 运输连接管理 连接建立:三次握手 连接释放 ...

  7. Python Socket Programming UDP/TCP

    基于UDP/TCP的套接字编程demo UDP 客户端/服务器 一个简单的基于UDP协议的客户端和服务器应用的进程通信. 逻辑: 客户端会给服务器发送小写的英文字母,服务器接受后,把它转化成大写再返回 ...

  8. linux中c语言和php语言通信代码UDP&TCP

    linux中c语言和php语言通信代码UDP&TCP http://blog.chinaunix.net/uid-24015214-id-2644174.html UDP方式通信   服务器端 ...

  9. Java 网络通信(TCP/UDP)

    1.InetAdress类 与  Socket类  >InetAdress  >Socket 2.TCP/IP协议簇  客户端: 创建 Socket:根据指定服务端的 IP 地址或端口号构 ...

随机推荐

  1. 视图表单访问控制器操作方法的POST、GET方式对应关系

    在视图中,表单默认访问方式是FormMethod.Post(不会将请求显示在地址栏中).在控制器中,操作方法不标注属性,默认为HttpGet属性.会有以下情况出现. 1.表单不指定访问方式(默认形式为 ...

  2. 通过struts2-spring-plugin集成Struts2和Spring,报错:ClassNotFound:*Interceptor.......

    集成Struts2和Spring的时候,出现错误,ClassNotFound: *interceptor,之所以是*interceptor是因为报了好多个这样的错误,而且类名都不一样. 集成方法是通过 ...

  3. (转) SQL Server中 ldf 文件过大的解决方法

    原文地址:http://blog.itpub.net/35489/viewspace-616459/ 在SQL Server中经常遇到事务日志变大的情况,除了将数据库设置为“自动收缩”外,还可以使用下 ...

  4. 使用root用户登录到AWS EC2服务器,上传文件到/var/www目录

    关键词 1.aws ec2中上传文件到/var/www目录(使用filezilla) 2.使用root用户登录aws ec2实例 上一篇随笔中记录了在aws ec2实例中部署apache服务器的过程, ...

  5. [软件安装]MYSQL

    https://dev.mysql.com/downloads/repo/yum/ wget https://repo.mysql.com//mysql57-community-release-el7 ...

  6. bzoj 3028: 食物【生成函数】

    承德汉堡:\( 1+x^2+x^4+...=\frac{1}{1-x^2} \) 可乐:\(1+x \) 鸡腿:\( 1+x+x^2=\frac{x^3-1}{x-1} \) 蜜桃多:\( x+x^3 ...

  7. bzoj 1834: [ZJOI2010]network 网络扩容【最大流+最小费用最大流】

    第一问直接跑最大流即可.建图的时候按照费用流建,费用为0. 对于第二问,在第一问dinic剩下的残量网络上建图,对原图的每条边(i,j),建(i,j,inf,cij),表示可以用c的花费增广这条路.然 ...

  8. 51nod 1190 最小公倍数之和 V2【莫比乌斯反演】

    参考:http://blog.csdn.net/u014610830/article/details/49493279 这道题做起来感觉非常奇怪啊--头一次见把mu推出来再推没了的-- \[ \sum ...

  9. CCF2016.4 - B题

    思路:创建两个bool数组来模拟下落过程,一个存放面板状态,一个存放下落的格子.检测格子和面板对应位置是否同时为True,如果是则有冲突,不能继续下落,否则增加行号.为了统一处理,我们把面板最下面加一 ...

  10. 搜索刷题记录by cellur925

    我好菜啊!连暴搜都不会! 注意边界退出! 特开此帖,记录搜索学习之路!(逃) 1.全排列 2.八皇后 3.数的划分 由于此题有同一划分方法算一个的限制,我们为了避免搜多,可以使搜出的结果满足单调不降性 ...