Python Socket Programming UDP/TCP
基于UDP/TCP的套接字编程demo
UDP 客户端/服务器
一个简单的基于UDP协议的客户端和服务器应用的进程通信。
逻辑:
客户端会给服务器发送小写的英文字母,服务器接受后,把它转化成大写再返回给客户端,客户端输出这组数字。由于Python3已经明确区分了str类和bytes类,因此发送的是字节。
UDP服务器:
from socket import *
udp_server_socket = socket(AF_INET, SOCK_DGRAM)
udp_server_port = 9600
name = gethostname()
udp_server_socket.bind(('', udp_server_port))
while True:
print('The Sever is ready to receive')
# 这段代码会一直处于阻塞状态,除非收到了响应
message, client_address = udp_server_socket.recvfrom(2048)
print('Client Address:', str(client_address), 'Coming!')
modified_message = message.upper()
udp_server_socket.sendto(modified_message, client_address)
UDP客户端
from socket import *
server_ip = '127.0.0.1'
server_port = 9600
udp_client_socket = socket(AF_INET, SOCK_DGRAM)
message = b'hello'
# 发送给服务器
udp_client_socket.sendto(message, (server_ip, server_port))
# 接受服务器的返回内容
modified_message, sever_address = udp_client_socket.recvfrom(2048)
print(modified_message)
udp_client_socket.close()
TCP 客户端/服务器
一个简单的基于TCP协议的客户端和服务器应用的进程通信。
TCP服务器
from socket import *
tcp_server_socket = socket(AF_INET, SOCK_STREAM)
tcp_server_port = 9700
tcp_server_socket.bind(('127.0.0.1', tcp_server_port))
tcp_server_socket.listen(1)
while True:
# 等待连接
print('Waiting for connecting!')
# 建立TCP连接
connection_socket, addr = tcp_server_socket.accept()
print('Connected from:', addr)
message = connection_socket.recv(2048)
print('The Sever is ready to receive')
upper_message = message.upper()
print(upper_message)
connection_socket.send(upper_message)
connection_socket.close()
TCP客户端
from socket import *
server_ip = '127.0.0.1'
server_port = 9700
tcp_client_socket = socket(AF_INET, SOCK_STREAM)
tcp_client_socket.connect((server_ip, server_port))
message = b'hello'
# 发送给服务器
tcp_client_socket.send(message)
# 接受服务器的返回内容
modified_message = tcp_client_socket.recv(2048)
print('Modified Message:', modified_message)
tcp_client_socket.close()
小结
在写这个demo的时候,犯了几个小错误:
在TCP的服务端socket中,我的recv方法不是在连接的
connection_socket上操作的,导致了一个错误:Transport endpoint is not connected
类似:https://stackoverflow.com/questions/35969714/error-transport-endpoint-is-not-connected-python-sockets在TCP的客户端socket中,我的recv方法想当然的接受了两个参数,导致错误。 这显示是因为没有区分好TCP和UDP的Socket的不同点。
由于TCP是面向连接的,每次在读写的socket对象,不必填入目标主机的地址,只需要直接读写数据即可,因此只能接受一个参数(data)。
而UDP是无连接,每次需要在发送数据需要时填入目标主机的地址,接受时始终也是两个参数: data和address。
Python Socket Programming UDP/TCP的更多相关文章
- Python Socket Programming
本文介绍使用Python进行Socket网络编程,假设读者已经具备了基本的网络编程知识和Python的基本语法知识,本文中的代码如果没有说明则都是运行在Python 3.4下. Python的sock ...
- python socket和简单tcp通信实现
python 服务端和客户端的简单交互 TCP服务端: 1 创建套接字,绑定套接字到本地IP与端口 s = socket.socket(socket.AF_INET,socket.SOCK_STREA ...
- 【Windows socket+IP+UDP+TCP】网络基础
Windows Socket+网络 Winsock是 Windows下套接字标准. Winsock 编程分为UDP[Windows socket + UDP],TCP[Wi ...
- [Python] socket发送UDP广播实现聊天室功能
一.说明 本文主要使用socket.socket发送UDP广播来实现聊天室功能. 重点难点:理解UDP通讯流程.多线程.UDP广播收发等. 测试环境:Win10\Python3.5. 程序基本流程:创 ...
- python socket 编程(TCP与UDP)
实验环境:python2 一.TCP编程 1.建立TCP服务器 ①创建TCPServer.py文件 ②编写服务器代码 1)创建socket对象,调用socket构造函数 2)绑定ip端口(IP号和端口 ...
- 170925_2 Python socket 创建UDP的服务器端和客户端
[python版本]3.6 UDP服务器端: from socket import * from time import ctime host = '' port = 21567 buf_size = ...
- Python socket – network programming tutorial
原文:https://www.binarytides.com/python-socket-programming-tutorial/ --------------------------------- ...
- [Python_7] Python Socket 编程
0. 说明 Python Socket 编程 1. TCP 协议 [TCP Server] 通过 netstat -ano 查看端口是否开启 # -*-coding:utf-8-*- "&q ...
- How To: Perl TCP / UDP Socket Programming using IO::Socket::INET
http://www.thegeekstuff.com/2010/07/perl-tcp-udp-socket-programming/ In this article, let us discuss ...
随机推荐
- tomcat中文乱码
1. https://blog.csdn.net/qq_35038153/article/details/78430359 2. 1.修改apache-tomcat-9.0.14-windows-x6 ...
- js - 常用工具集功能函数
Note [普通JSON数组插入指定位置并且合并] let arr = [{ a: 11 }, { a: 11 }, { a: 11 }, { a: 117 }, { a: 11 }, { a: 11 ...
- 我的node-webkit笔记
话不多说,直接上码: index.html <!DOCTYPE html> <html> <head> <meta charset="utf-8&q ...
- pandas连接多个表格concat()函数
网易云课堂该课程链接地址 https://study.163.com/course/courseMain.htm?share=2&shareId=400000000398149&cou ...
- 015 vue的项目
一:搭建项目 1.框架 在原有的基础上 src: 2.index.html <!DOCTYPE html> <html lang="en"> <hea ...
- [转]vscodesvn安装和使用
原文链接:https://blog.csdn.net/wzh66888/article/details/90145340 1.安装svn插件 2.安装成功后会出现这样的图标 如果没有安装之后不能使用, ...
- Java:JSON和Map相互转换
Java:JSON与Map相互转换 需要jar包:jackson-core-2.6.0.jar,jackson-databind-2.6.0.jar,jackson-annotations-2.6.0 ...
- 【GMT43智能液晶模块】例程十四:MODBUS TCP实验——电源监控
. 源代码下载链接: 链接:https://pan.baidu.com/s/1S8wZBJBYGxuPaWEkJvMJlg 提取码:5bh3 复制这段内容后打开百度网盘手机App,操作更方便哦 GMT ...
- Egret自定义计时器(TimerManager和Laya.timer)
一 自定义计时器 因为游戏中经常用到计时器,比如每1秒发射一枚子弹啊,每2秒怪物AI自动转向啊 每次去new Timer 然后addEventListener(egret.TimerEvent... ...
- LwIP应用开发笔记之六:LwIP无操作系统TCP客户端
上一篇我们基于LwIP协议栈的RAW API实现了一个TCP服务器的简单应用,接下来一节我们来实现一个TCP客户端的简单应用. 1.TCP简述 TCP(Transmission Control Pro ...