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 ...
随机推荐
- 投稿SCI杂志 | 如何撰写cover letter | 如何绘制illustrated abstract
现在大部分学术期刊杂志都要求提供这两样东西. 一个是面向editor的文章和研究的高度总结:一个是面向读者的高度总结,一图胜千言. 如何制作动画摘要呢? 收集素材,大部分内容在PPT里就能完成. 如何 ...
- Centos7下安装ORACLE 11g,弹窗不显示
Centos7下安装ORACLE 11gR2,弹窗不显示,安装界面显示为灰色. 解决方法:执行安装时带上一下参数 ./runInstaller -jreLoc /etc/alternatives/jr ...
- 如何学会快速调用API
作为一名苦逼的程序员,在实现各种需求的过程中,总是需要调用各种各样的API,也就是要读各种文档.我们所要做的是弄清楚这些API的参数然后调用即可.说起来非常简单,是实际上却不是这样.现在火爆的机器学习 ...
- Deploy a plain HTTP registry
当docker pull a.b.com/ubuntu:14.04的时候,如果提示:“Docker x509 insecure registry”之类的,说这个registry不安全的,如果就是想在a ...
- mysql组合索引的有序性<转>
昨天同事关于军规里的一条mysql索引的问题咨询我,才发现自己也不太了解组合索引的规则.于是来记录一下: [推荐]如果有order by的场景,请注意利用索引的有序性.order by 最后的字段是组 ...
- 简单工厂(二)——coding
public abstract class Video { public abstract void produce(); } public class JavaVideo extends Video ...
- spring boot2.x中集成H2数据库
H2数据库介绍 查看 在spring boot中集成 1.添加依赖 <dependency> <groupId>org.springframework.boot</gr ...
- Kubernetes集群
Kubernetes已经成为当下最火热的一门技术,未来一定也会有更好的发展,围绕着云原生的周边产物也越来越多,使得上云更加便利更加有意义,本文主要讲解一些蔚来汽车从传统应用落地到Kubernetes集 ...
- RobotFrameWork中使用自定义关键字
今天尝试在RF中使用一下自己写的关键字. 1.首先写一个py文件,如下,简单打印个message 2.在RF中点击library,把写的py文件加进来 3.使用函数mylog,有一个参数,也可以F5看 ...
- spring data jpa碰到的坑
1.不能从别的类的repository那里 执行另一个类的sql,这样映射会失败. 2.有entity,就要有repository,并且还要有id注解 3.还要多表联查未测试,估计要用map去映射出来 ...