Python Socket 通信
参考: http://www.cnblogs.com/alex3714/articles/5830365.html
Socket
- A network socket is an endpoint of a connection across a computer network. Today, most communication between computers is based on the Internet Protocol; therefore most network sockets are Internet sockets. More precisely, a socket is a handle (abstract reference) that a local program can pass to the networking application programming interface (API) to use the connection, for example "send this data on this socket".
- 实现步骤 (伪代码:)
Socket socket = getSocket(type = "TCP") #设定好协议类型
connect(socket, address = "1.2.3.4", port = "") #连接远程机器
send(socket, "Hello, world!") #发送消息
close(socket) #关闭连接
简单Socket 实例
1. 客户端
#!/usr/bin/python
# -*- coding: utf-8 -*- # 客户端
import socket
client = socket.socket() # 声明socket类型, 同时生成socket链接对象
client.connect(('localhost', 6969)) client.send(b"Hellow World") # 只能接收字节类型, 所以要加b转一下 data = client.recv(1024) # 收1024个字节
print("recv: ", data) client.close()
客户端
2. 服务端
#!/usr/bin/python
# -*- coding: utf-8 -*- """
要实现对话:
1. 需要用多线程, 服务器端和客户端交叉执行才能完成一个对话;
2. 用异步也可以实现
3. 最简单的, 哪个实例发过来的, 就用哪个实例接收(在代码执行窗口手动切换 client端和服务端).
""" # 服务器端
import socket
server = socket.socket() # 不传入参数就是使用构造方法的默认参数设置
server.bind(('localhost', 6969)) # 绑定要监听的端口
server.listen() # 监听 print("我要开始等电话了")
conn, addr = server.accept() # 等电话打进来. server.accept()返回两个值,分别赋给conn, addr.
# conn就是客户端连过来而在服务器端为其生成的一个连接实例 print(conn, addr) print("电话来了") # data = server.recv(1024) # 开始接收对方发过来的信息
data = conn.recv(1024) # 谁打来的电话, 跟谁聊
print("recv: ", data)
# server.send(data.upper())
conn.send(data.upper()) server.close()
服务端
实现效果:
挂起多个客户端实例.
客户端:
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
重复发送和接收多次:
1. 实现用户输入
""" import socket client = socket.socket() # 声明socket类型, 同时生成socket连接对象
client.connect('localhost', 6969) while True:
msg = input(">>: ").strip()
if len(msg) == 0: continue # 不能发空的. 否则系统以为用户还在输入, 会一直等.
client.send(msg.encode("utf-8"))
data = client.recv(1024)
print("recv: ", data.decode()) # 把utf-8转成unicode client.close()
client端
服务器端:
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
下面这段在linux执行时, 如果client端断开, server端会陷入死循环.
在window里, 如果client端断开, server端也会断开. 要克服上述问题, 要加个判断, 如果接收的信息是空, 断开循环. (见第二段代码) """
# 服务器端
import socket
server = socket.socket() # 不传入参数就是使用构造方法的默认参数设置
server.bind(('localhost', 6969)) # 绑定要监听的端口
server.listen() # 监听 print("我要开始等电话了")
conn, addr = server.accept() # 等电话打进来. server.accept()返回两个值,分别赋给conn, addr.
# conn就是客户端连过来而在服务器端为其生成的一个连接实例 print(conn, addr) print("电话来了") # data = server.recv(1024) # 开始接收对方发过来的信息
data = conn.recv(1024) # 谁打来的电话, 跟谁聊
print("recv: ", data)
# server.send(data.upper())
conn.send(data.upper()) server.close() """
上面这段代码实现的是如果client端断开, server端也随之断开. 但是server应该还能接收新的电话进来 . 所以要加循环.
"""
#
import os
import socket
server = socket.socket() # 不传入参数就是使用构造方法的默认参数设置
server.bind(('localhost', 6969)) # 绑定要监听的端口
server.listen() # 监听. server.listen(5)代表最多能挂起5个client端(不断开, 排队), 但这种情况要在异步情形下才能测出来. print("我要开始等电话了") while True: #即使当前client端断开, 还可以等新的电话
conn, addr = server.accept() # 等电话打进来. server.accept()返回两个值,分别赋给conn, addr.
# conn就是客户端连过来而在服务器端为其生成的一个连接实例 print(conn, addr)
print("电话来了") while True:
# data = server.recv(1024) # 开始接收对方发过来的信息
data = conn.recv(1024) # 谁打来的电话, 跟谁聊. 一次最多收10240字节.
print("recv: ", data)
if not data:
print("client has lost...")
break # 切断循环
res = os.popen(data).read() # 打印执行结果
# server.send(data.upper())
# conn.send(data.upper())
conn.send(res) server.close()
server端
Python Socket 通信的更多相关文章
- Python Socket通信原理
[Python之旅]第五篇(一):Python Socket通信原理 python Socket 通信理论 socket例子 摘要: 只要和网络服务涉及的,就离不开Socket以及Socket编 ...
- python - socket通信笔记
参考: 通过编写聊天程序来熟悉python中多线程和socket的用法:https://www.cnblogs.com/mingjiatang/p/4905395.html python socket ...
- Python socket 通信功能简介
常用的地址家族AF_UNIX:基于文件,实现同一主机不同进程之间的通信AF_INET:基于网络,适用于IPv4AF_INET6:基于网络,使用于IPv6 常见的连接类型SOCK_STREAM:即TCP ...
- Python Socket通信黏包问题分析及解决方法
参考:http://www.cnblogs.com/Eva-J/articles/8244551.html#_label5 1.黏包的表现(以客户端远程操作服务端命令为例) 注:只有在TCP协议通信的 ...
- Python Socket通信例子
一.TCP 通信 服务端 #!/usr/bin/env python # -*- coding: utf-8 -*- # server_tcp.py import socket so = socket ...
- Python socket通信之FTP
Python中利用socket进行server端和client端通信是网络编程的基础,是最简单的传输范例. (懂网络的请自动跳过这一部分) 首先,要想通信,必须建立连接,建立连接的过程,需要clien ...
- 树莓派小车By 树莓派爱好者ITJoker(通过python socket通信实现树莓派视频小车)(一)
本文由树莓派爱好者ITJoker 编辑,转载请注明出处.本人也有新浪博客同样是树莓派爱好者ITJoker 所需材料:树莓派2B或者2B以上,L2985n驱动板,若干排线,电池及电池盒,usb无线网卡( ...
- 程序媛计划——python socket通信
定义 socket 是进程间的一种通信方式,可以实现不同主机间的数据传输 #写服务期端程序server.py #实现服务器向客户端连接 #!/usr/bin/env python #coding:ut ...
- Python简易聊天工具-基于异步Socket通信
继续学习Python中,最近看书<Python基础教程>中的虚拟茶话会项目,觉得很有意思,自己敲了一遍,受益匪浅,同时记录一下. 主要用到异步socket服务客户端和服务器模块asynco ...
随机推荐
- 基于sql service会话共享,实现SSO
1:session的存储基于sql service数据库来存储 2:修改sql service中会话管理的系统存储过程 3:实现几个站点的会话共享 4:应用共享会话,实现单点登录
- Android_EditText 密码框默认是小圆点 怎么改成其它的(*)?
text.setTransformationMethod(new AsteriskPasswordTransformationMethod()); public class AsteriskPassw ...
- 单线程实现同时监听多个端口(windows平台c++代码)
前言 多年前开发了一套网络库,底层实现采用IOCP(完成端口).该库已在公司多个程序中应用:经过多次修改,长时间检验,已经非常稳定高效. 最近把以前的代码梳理了一下,又加进了一些新的思路.代码结构更加 ...
- tensorflow 优化图
当我们把训练好的tensorflow训练图拿来进行预测时,会有多个训练时生成的节点,这些节点是不必要的,我们需要在预测的时候进行删除. 下面以bert的图为例,进行优化 def optimize_gr ...
- (Dijkstra)迪杰斯特拉算法-最短路径算法
迪杰斯特拉算法是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止. 算法思想:设G=(V,E)是一个带权有向图 ...
- 从Java进程里dump出类的字节码文件
想要查看一些被增强过的类的字节码,或者一些AOP框架的生成类,就需要dump出运行时的Java进程里的字节码. 从运行的java进程里dump出运行中的类的class文件的方法: 用agent att ...
- linux中为什么cpu使用率会超过100见解
linux的cpu使用频率是根据cpu个数和核数决定的 top,然后你按一下键盘的1,这就是单个核心的负载,不然是所有核心的负载相加,自然会超过100 如上面 cpu个数是4个,那么cpu可以占到40 ...
- Nginx缓存配置之手动清除缓存
访问我的博客 前言 前文介绍了利用 nginx 的 nginx_ngx_cache_purge 模块来实现缓存功能,并设置了缓存时间为一天. 但是如果前端修改了页面,比如首页,由于 Nginx 缓存的 ...
- 即时通讯App怎样才能火?背后的技术原理,可以从这5个角度切入
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯云视频发表于云+社区专栏 关注公众号"腾讯云视频",一键获取 技术干货 | 优惠活动 | 视频方案 社交场景 ...
- notepad++ jstool 插件安装
notepad++ 格式化显示 网上下载 jstool 插件 放入Notepad++\安装目录的plugins位置下,重启即可使用 插件-->JSTool