当前位置: 首页 > news >正文

【Python网络编程】利用Python进行TCP、UDP套接字编程

之前实现了Java版本的TCP和UDP套接字编程的例子,于是决定结合Python的学习做一个Python版本的套接字编程实验。

流程如下:

1.一台客户机从其标准输入(键盘)读入一行字符,并通过其套接字将该行发送到服务器。

2.服务器从其连接套接字读取一行字符。

3.服务器将该行字符转换成大写。

4.服务器将修改后的字符串(行)通过连接套接字再发回给客户机。

5.客户机从其套接字中读取修改后的行,然后将该行在其标准输出(监视器)上打印出来。

【TCP】服务器端代码:

import socket
import time
import threadings = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  #创建socket (AF_INET:IPv4, AF_INET6:IPv6) (SOCK_STREAM:面向流的TCP协议)s.bind(('127.0.0.1', 10021))                           #绑定本机IP和任意端口(>1024)s.listen(1)                                            #监听,等待连接的最大数目为1print('Server is running...')                          def TCP(sock, addr):                                   #TCP服务器端处理逻辑print('Accept new connection from %s:%s.' %addr)   #接受新的连接请求while True:data = sock.recv(1024)                         #接受其数据time.sleep(1)                                  #延迟if not data or data.decode() == 'quit':        #如果数据为空或者'quit',则退出breaksock.send(data.decode('utf-8').upper().encode())  #发送变成大写后的数据,需先解码,再按utf-8编码,  encode()其实就是encode('utf-8')sock.close()                                       #关闭连接print('Connection from %s:%s closed.' %addr)       while True:sock, addr = s.accept()                            #接收一个新连接TCP(sock, addr)                                    #处理连接

【TCP】客户端代码:

import sockets = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #创建一个sockets.connect(('127.0.0.1', 10021))                       #建立连接while True:                                           #接受多次数据data = input('请输入要发送的数据:')                 #接收数据if data == 'quit':                                #如果为'quit',则退出breaks.send(data.encode())                             #发送编码后的数据print(s.recv(1024).decode('utf-8'))               #打印接收到的大写数据s.send(b'quit')                                       #放弃连接s.close()                                             #关闭socket

运行结果:

UDP协议则不需要事先建立连接,直接互相发送数据即可。

【UDP】服务器端代码:

import sockets = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #创建一个socket,SOCK_DGRAM表示UDPs.bind(('127.0.0.1', 10021))                         #绑定IP地址及端口print('Bound UDP on 10021...')while True:                                          data, addr = s.recvfrom(1024)   #获得数据和客户端的地址与端口,一次最大接收1024字节print('Received from %s:%s.' % addr)s.sendto(data.decode('utf-8').upper().encode(), addr)#将数据变成大写送回客户端#不关闭socket

【UDP】客户端代码:

import sockets = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) addr = ('127.0.0.1', 10021)       #服务器端地址while True:data = input('请输入要处理的数据:') #获得数据if not data or data == 'quit':breaks.sendto(data.encode(), addr)    #发送到服务端recvdata, addr = s.recvfrom(1024)  #接收服务器端发来的数据print(recvdata.decode('utf-8'))    #解码打印s.close()            #关闭socket

运行结果:

http://www.lryc.cn/news/14208.html

相关文章:

  • fuzz测试之libfuzzer使用小结
  • 电子标签拣货系统——外接供电版
  • 为什么启动一个线程不用run()方法,而是用start()方法
  • Java File相关操作
  • LabVIEW利用矢量量化直方图开发人脸识别
  • RK3568工业开发板工控板说明
  • JavaScript Web API 来构建你不了解的网站
  • KeePass敏感信息明文传输漏洞复现 (CVE-2023-24055)
  • Android 11 中的权限更新
  • october-cms
  • 抖音怎样报白?报白需要审核哪些资料呢
  • Spring中的AOP
  • 文件系统与动静态库的基本了解
  • netty——IO、NIO、AIO进化之路
  • AI稳定生成图工业链路打造
  • 20230220华南金牌主板u盘启动
  • 测试团队都在用哪些不错的测试用例管理平台?盘点6大主流测试管理系统
  • linux 系统编程之线程
  • 从0开始学python -35
  • 1.14 golang中的结构体
  • 原创不易,坚持更难
  • 计算机网络 | 谈谈TCP的流量控制与拥塞控制
  • Flask入门(7):内置装饰器(钩子函数)
  • Java8新特性
  • 哈希表题目:设计哈希集合
  • java static关键字 万字详解
  • 光谱实验反射、透射光谱测量
  • 【基础算法】之 冒泡排序优化
  • Python | 线程锁 | 3分钟掌握【同步锁】(Threading.Lock)
  • Linux下安装MySQL8.0的详细步骤(解压tar.xz安装包方式安装)