Python socket (单线程)
client, 客户端 code :
客户端主要方法, s.send(); s.sendall(); s.recv(); s.connect() class Client(object): def __init__(self, ip, PortNo=XXX):
self.ip = ip
self.PortNo = PortNo def connect_socket(self):
count = 1
status = 0
while count < 6 and status == 0: # 尝试5次 在 ip::PortNo 上创建socket 链接.
print ("Attempt %s time(s) to open socket port" % count)
try:
self.soct = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 定义socket 类型(TCP)
except socket.error, e: # socket error 异常处理, 这里把异常catch住,代码可以继续运行. 函数结尾返回一个函数运行结果标志位,供main函数或者调用函数判断.
print ("error occur during creating socket: : %s" % e)
try:
self.soct.connect((self.ip, self.PortNo))
status = 1
print ("Socket opened success: %s :: %s" % (self.ip, self.PortNo))
except socket.error, e: # 常见 socket error 有 目标地址错误,PortNo 被占用, 防火墙 等原因
print ("Address or port related error detected during connect to server: : %s" % e)
count += 1
time.sleep(3)
if status == 0:
return False
return True # 返回函数运行结果
Client 端发消息
while True:
cmd = raw_input("respond")
if cmd == "exit":
break
elif len(cmd) == 0:
continue
s.send(cmd)
date = s.recv(1024)
print ("rec:",date)
server, 服务端code,
服务端主要方法, s.recv(); s.send(); s.sendall(); s.bind(); s.close() class Server(object):
def __init__(self, ip, PortNo=XXX):
self.ip = ip
self.PortNo = PortNo
def run_server(self):
self.soct = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 定义socket 类型(TCP)
self.scot.bind((self.ip,self.PortNo))
self.soct.listen(1) # socket 监听的数量.
conn,addr = self.soct.accept() # 接受 scoket 链接请求.
print("Socket has been established with %s :: %s" % (conn,addr))
while True:
data_r = self.soct.recv(1024) # 从socket 上接受数据
if not data_r:
break #若已连接的client端断开,退出
print("Received %s from socket" % data_r)
self.soct.sendall("data_s") # 向socket 发送数据
print("Send data %s to socket" % data_s)
self.soct.close() # 结束所建立的 socket 方法.
Python socket (单线程)的更多相关文章
- Python Socket单线程+阻塞模式
Python之旅]第五篇(二):Python Socket单线程+阻塞模式 python Socket单线程 Socket阻塞模式 串行发送 摘要: 前面第五篇(一)中的一个Socket例子其实就是 ...
- python socket单线程通信
注意 socket通信默认的情况下是属于阻塞形式通信,在recv与accept函数会进行阻塞 1.客户端正常退出的情况下,server端的con的通道会正常的关闭,recv直接赋值为空 2.在wind ...
- 第五十三节,socket模块介绍,socket单线程通讯
socket单线程通讯,只能单线程通讯,不能并发 socket是基于(TCP.UDP.IP)的通讯.也叫做套接字 通讯过程由服务端的socket处理信息发送,由客户端的socket处理信息接收. so ...
- Python Socket请求网站获取数据
Python Socket请求网站获取数据 ---阻塞 I/O ->收快递,快递如果不到,就干不了其他的活 ---非阻塞I/0 ->收快递,不断的去问,有没有送到,有没有送到,. ...
- python socket编程 实现简单p2p聊天程序
目标是写一个python的p2p聊天的项目,这里先说一下python socket的基础课程 一.Python Socket 基础课程 Socket就是套接字,作为BSD UNIX的进程通信机制,取后 ...
- python - socket通信笔记
参考: 通过编写聊天程序来熟悉python中多线程和socket的用法:https://www.cnblogs.com/mingjiatang/p/4905395.html python socket ...
- Python Socket 编程——聊天室示例程序
上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的 ...
- Python Socket 网络编程
Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...
- python socket发送魔法包网络唤醒开机.py
python socket发送魔法包网络唤醒开机.py 现在的电脑应该都普遍支持有线网络的WOL了,支持无线网络唤醒的电脑,可能比较少. """ python socke ...
随机推荐
- 转载:Solr的自动完成实现方式(第一部分:facet方式)
转自:http://www.cnblogs.com/ibook360/archive/2011/11/30/2269059.html 大部分人已经见过自动完成(autocomplete)的功能了(见下 ...
- c# NPOI 导出EXCEL
需要引入dll文件 也可以在NuGet里面管理(推荐) 比较方便 . using System; using System.Collections.Generic; using System.Linq ...
- 四、解决MyEclipse控制台输出中文乱码的问题
问题描述: 在Java程序中,在MyEclipse开发环境下,通过标准输入输入中文,并把输入的中文信息从标准输出显示出来,这时中文出现乱码情况.解决方法:解决方法需要两个步骤(本文测试环境 ...
- Could not synchronize database state with session
今天做一个简单保存时,db2数据库报的错误,网上收集了下问题的解决办法~ 1.主键不是自动生成的,然后自己没手动设置. 2.插入的实体字段跟数据库的关键字冲突. 3.更新的时候,如果更新一个不存在的i ...
- win10家庭版快速升级专业版
win10家庭普通版升级专业版方法: 1.点击“开始”,选择控制面板. 2.点击“系统与安全”,选择“Windows Anytime Upgrade”.(或者:单击「开始」按钮,在搜索框中,键入any ...
- RHEL6.7 x64双节点安装Oracle 11g r2 RAC
基础环境 使用两台HP DL580服务器作为RAC节点,存储使用IBM V7000.具体环境如下: 设备 用途 IP地址 磁盘空间 HP DL580 RAC节点01 RAC01-pub:116.1.1 ...
- linux shell执行中需要交互输入回车,Yes/NO Y/N
最近写自动安装脚本遇到redis-server安装的时候,需要输入3个回车,对此尝试无果,最后google比较满意的解决办法: shell 脚本需要交互,比如输入回车,输入YES/NO Y/N之类进行 ...
- easyui 使用问题积累
一.<a>标签中onclick和javascript事件与grid的select事件执行的先后顺序 html: <a href='javascript:func();' onclic ...
- jQuery Select 自动选择默认值
////// the Select target Auto Select value extension plugin // // ---------------------------------- ...
- mysql在linux下不区分大小写
1.先停止mysql service mysql stop 2.如果用rpm直接安装的mysql,路径在:/usr/下,查找my.cnf. 3.在[mysqld]下添加: lower_case_tab ...