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 ...
随机推荐
- MySQL 性能调优
MySQL 性能调优 索引 索引是什么 官方介绍索引是帮助MySQL高效获取数据的数据结构.笔者理解索引相当于一本书的目录,通过目录就知道要的资料在哪里,不用一页一页查阅找出需要的资料. 索引目的 ...
- Spring中为什么继承了ApplicationContextAware接口就可以使用ApplicationContext对象?
1.Spring中使用applicationContext对象 public class SpringContextUtil implements ApplicationContextAware { ...
- mysql/mongodb监控之Percona Monitoring and Management (PMM) 2.1.0安装使用
Percona Monitoring and Management (PMM)是Percona Server一款开源的用于管理和监控MySQL和MongoDB性能的开源平台,通过PMM客户端收集到的D ...
- Python的threading和multiprocessing
Python的threading 基础用法, 通过 threading.Thread() 创建线程, 然后 start() 和 join() import time import threading ...
- Chrome:不受信任的证书----openssl签发带Subject Alternative Name的证书
Chrome下自签名证书提示无效的问题 发现chrome验证证书很严格,必须带有Subject Alternative Name.签发csr时,修改openssl.cnf : vi /etc/ssl/ ...
- Feign进行文件上传+表单调用
Feigin默认是不支持文件上传和表单提交的,需要做一些配置才能支持. 1.feign依赖 图中红色为form支持必须的jar. 2.添加自定义Encoder类: import static java ...
- Zookeeper:Unable to read additional data from client sessionid 0x00, likely client has closed socket
异常信息: 2018-03-20 23:34:01,887 [myid:99] - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerC ...
- 如何使用phantomJS来模拟一个HTML元素的鼠标悬停
如何使用phantomJS来模拟一个HTML元素的鼠标悬停 (How to use phantomJS to simulate mouse hover on a HTML element) 转 htt ...
- 量化编程技术—numpy与统计学
# -*- coding: utf-8 -*- # @Date: 2017-08-26 # @Original: import numpy as np # 200支股票 stock_cnt = 200 ...
- (CSDN迁移)JAVA多线程实现-继承Thread
继承Thread方法: extends Thread 重写覆盖run()方法: @Override public void run() 通过start()方法启动线程. threadDemo01.st ...