UDP

UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。 UDP传输数据时有大小限制,每个被传输的数据报必须限定在64KB之内。 UDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方。

udp通信模型中,在通信开始之前,不需要建立相关的链接,只需要发送数据即可,类似于生活中,"写信"。

客户端:

  1. from socket import socket,AF_INET,SOCK_DGRAM
  2. # 创建套接字,SOCK_DGRAM使用udp协议
  3. udp = socket(AF_INET, SOCK_DGRAM)
  4. # 目的端口和ip
  5. ip = "127.0.0.1"
  6. port = 8080
  7. # 循环从键盘输入发送消息
  8. while True:
  9. data = input("请输入发送的数据:")
  10. udp.sendto(data.encode("utf-8"), (ip, port))

服务端:

  1. from socket import socket, AF_INET, SOCK_DGRAM
  2. udp = socket(AF_INET, SOCK_DGRAM)
  3. # 绑定端口,服务端必须要绑定端口
  4. udp.bind(("", 8080))
  5. while True:
  6. # 接受数据,每次接受1024字节
  7. recvData = udp.recvfrom(1024)
  8. # 拆包
  9. data, info = recvData
  10. # 打印
  11. print("[%s]:%s" % (info, data.decode("utf-8")))

TCP

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

客户端:

  1. from socket import socket,AF_INET,SOCK_STREAM
  2. # 创建套接字,SOCK_STREAM表示使用tcp协议
  3. clientSocket = socket(AF_INET,SOCK_STREAM)
  4. # 连接服务器
  5. clientSocket.connect(("127.0.0.1",8080))
  6. # 发送数据
  7. while True:
  8. s = input("请输入要发送的数据:")
  9. clientSocket.send(s.encode("utf-8"))

服务端:

  1. from socket import socket, AF_INET, SOCK_STREAM
  2. tcp = socket(AF_INET, SOCK_STREAM)
  3. # 绑定端口
  4. tcp.bind(("", 8080))
  5. # listen的参数代表可建立socket连接的最大个数 windows,mac 此连接参数有效 Linux 此连接参数无效,默认最大
  6. tcp.listen()
  7. # 有新的客户端连接时,
  8. # clientSocket表示一个新的套接字
  9. # clientInfo 表示新客户端的ip及端口号
  10. while True:
  11. clientSocket, clientInfo = tcp.accept()
  12. try:
  13. while True:
  14. recvData = clientSocket.recv(1024)
  15. # 如果接受的的数据为空就退出
  16. if not recvData:
  17. break
  18. print("%s:%s" % (str(clientInfo), recvData.decode("utf-8")))
  19. finally:
  20. clientSocket.close()

python网络编程——使用UDP、TCP协议收发信息的更多相关文章

  1. Python网络编程02 /基于TCP、UDP协议的socket简单的通信、字符串转bytes类型

    Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes类型 目录 Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes ...

  2. python网络编程(通过tcp或者udp协议通信)

    1.基于tcp协议传送文件: 客户端: import socketimport osimport jsonimport structclient = socket.socket()client.con ...

  3. python 之 网络编程(基于TCP协议的套接字通信操作)

    第八章网络编程 8.1 基于TCP协议的套接字通信 服务端套接字函数 s.bind() 绑定(主机,端口号)到套接字 s.listen() 开始TCP监听 s.accept() 被动接受TCP客户的连 ...

  4. python网络编程(Socket、TCP、UDP)

    Socket 是网络编程的一个抽象概念,通常我们用一个Socket表示 "打开了一个网络链接",而打开一个Socket 需要知道目标计算机的IP 地址和端口号,再指定协议类型即可. ...

  5. 二、网络编程-socket之TCP协议开发客户端和服务端通信

    知识点:之前讲的udp协议传输数据是不安全的,不可靠不稳定的,tcp协议传输数据安全可靠,因为它们的通讯机制是不一样的.udp是用户数据报传输,也就是直接丢一个数据包给另外一个程序,就好比寄信给别人, ...

  6. 网络编程杂谈之TCP协议

    TCP协议属于网络分层中的传输层,传输层作用的就是建立端口与端口的通信,而其下一层网络层的主要作用是建立"主机到主机"的通信,所以在我们日常进行网络编程时只要确定主机和端口,就能实 ...

  7. 学习笔记——网络编程3(基于TCP协议的网络编程)

    TCP协议基础 IP协议是Internet上使用的一个关键协议,它的全称是Internet Protocol,即Internet协议,通常简称IP协议.   使用ServerSocket创建TCP服务 ...

  8. python 之网络编程(基于TCP协议Socket通信的粘包问题及解决)

    8.4 粘包问题 粘包问题发生的原因: 1.发送端需要等缓冲区满才发送出去,造成粘包(发送数据时间间隔很短,数据了很小,会合到一起,产生粘包),这样接收端,就难于分辨出来了,必须提供科学的拆包机制. ...

  9. python-socket网络编程笔记(UDP+TCP)

    端口 在linux系统中,有65536(2的16次方)个端口,分为: 知名端口(Well Known Ports):0-1023,如80端口分配给HTTP服务,21端口分配给FTP服务. 动态端口(D ...

随机推荐

  1. [CSP-S模拟测试]:二叉搜索树(DP+贪心)

    题目传送门(内部题99) 输入格式 第一行一个整数$n$,第二行$n$个整数$x_1\sim x_n$. 输出格式 一行一个整数表示答案. 样例 样例输入: 58 2 1 4 3 样例输出: 数据范围 ...

  2. How to correctly set application badge value in iOS 8?

    o modify the badge under ios8 you have to ask for permissions let settings = UIUserNotificationSetti ...

  3. 7 vi 编辑器

    1.vim编辑器的工作模式 命令模式,插入模式,可视化模式,扩展命令模式. 2.命令模式 2.1.光标定位 hjkl:小键盘上下左右移动 0 $:行头.行尾 gg G:第一行.最后一行 30G:进入第 ...

  4. 报错:SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'admin' for key 'username'

    在提交注册信息的时候报错:SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'admin' for key ' ...

  5. HearthBuddy的狂野和休闲模式来回切换

    表现1 配置是标准,休闲模式 然后一直重复提示 select desire deck select causal mode 表现2 配置是狂野,休闲模式 然后一直提示 切换到狂野 切换到标准 把模式切 ...

  6. leetcode-hard-array-287. Find the Duplicate Number

    mycode   77.79% class Solution(object): def findDuplicate(self, nums): """ :type nums ...

  7. StringUtils字符串工具类左侧补齐(leftPad)、右侧补齐(rightPad)、左右两侧补齐(center)工具方法

    这里使用的是 org.apache.commons.lang.StringUtils;下面是StringUtils工具类中字符串左侧补齐的方法,示例如下: //左侧补齐 第一个参数:原始字符串,第二个 ...

  8. Find Method Sign Line Number

    package java9; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; i ...

  9. TypeScript 编译目标(target)设置

    TypeScript的编译配置文件tsconfig.json中有许多配置项,本文简单对比编译目标环境的配置项(target)的设置.模块(module)不在本文讨论之内,是另外一个大话题. 实验对于t ...

  10. UITableView的使用总结

    直接贴代码了,很好理解,注释很全,一看就懂...... // // ViewController.m // TableViewSectionTitleDemo // // Created by 思 彭 ...