Python -- 网络编程 -- Socket简单网络通信
Qt如果多线程的话,似乎会出BUG
1.服务端(server.py)
import sys, socket, threading import binascii from PyQt4 import QtCore, QtGui class ListenThread(threading.Thread): def __init__(self, txt, server): threading.Thread.__init__(self) self.txt = txt self.server = server def run(self): self.txt.append('来嘛来嘛\n') while 1: try: client, addr = self.server.accept() self.txt.append('连接来自:{}:{}\n'.format(addr[0], addr[1])) data = client.recv(1024) self.txt.append('收到数据:{}\n'.format(data.decode('utf-8'))) client.send('I Got:'.encode('utf-8') + data) client.close() self.txt.append('关闭客户端\n') except: self.txt.append('关闭连接\n') break class ControlThread(threading.Thread): def __init__(self, txt): threading.Thread.__init__(self) self.txt = txt self.event = threading.Event() self.event.clear() def run(self): self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.server.bind(('', 1051)) self.server.listen(1) self.txt.append('正在等待连接\n') self.lsn = ListenThread(self.txt, self.server) self.lsn.setDaemon(True) self.lsn.start() self.event.wait() self.server.close() def stop(self): self.event.set() class MyWindow(QtGui.QWidget): def __init__(self): QtGui.QWidget.__init__(self) self.setWindowTitle('服务端') self.resize(485, 300) self.btn1 = QtGui.QPushButton('开始监听') self.btn2 = QtGui.QPushButton('停止监听') self.txt = QtGui.QTextEdit() self.grid = QtGui.QGridLayout() self.grid.addWidget(self.btn1, 0, 0) self.grid.addWidget(self.btn2, 0, 1) self.grid.addWidget(self.txt, 1, 0, 1, 2) self.setLayout(self.grid) self.connect(self.btn1, QtCore.SIGNAL('clicked()'), self.onBtn1) self.connect(self.btn2, QtCore.SIGNAL('clicked()'), self.onBtn2) def onBtn1(self): self.ctrl = ControlThread(self.txt) self.ctrl.setDaemon(True) self.ctrl.start() def onBtn2(self): self.ctrl.stop() app = QtGui.QApplication(sys.argv) mywindow = MyWindow() mywindow.show() app.exec_()
2.客户端(client.py)
import sys, socket, threading import binascii from PyQt4 import QtCore, QtGui class ListenThread(threading.Thread): def __init__(self, txt, server): threading.Thread.__init__(self) self.txt = txt self.server = server def run(self): self.txt.append('来嘛来嘛\n') while 1: try: client, addr = self.server.accept() self.txt.append('连接来自:{}:{}\n'.format(addr[0], addr[1])) data = client.recv(1024) self.txt.append('收到数据:{}\n'.format(data.decode('utf-8'))) client.send('I Got:'.encode('utf-8') + data) client.close() self.txt.append('关闭客户端\n') except: self.txt.append('关闭连接\n') break class ControlThread(threading.Thread): def __init__(self, txt): threading.Thread.__init__(self) self.txt = txt self.event = threading.Event() self.event.clear() def run(self): self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.server.bind(('', 1051)) self.server.listen(1) self.txt.append('正在等待连接\n') self.lsn = ListenThread(self.txt, self.server) self.lsn.setDaemon(True) self.lsn.start() self.event.wait() self.server.close() def stop(self): self.event.set() class MyWindow(QtGui.QWidget): def __init__(self): QtGui.QWidget.__init__(self) self.setWindowTitle('服务端') self.resize(485, 300) self.btn1 = QtGui.QPushButton('开始监听') self.btn2 = QtGui.QPushButton('停止监听') self.txt = QtGui.QTextEdit() self.grid = QtGui.QGridLayout() self.grid.addWidget(self.btn1, 0, 0) self.grid.addWidget(self.btn2, 0, 1) self.grid.addWidget(self.txt, 1, 0, 1, 2) self.setLayout(self.grid) self.connect(self.btn1, QtCore.SIGNAL('clicked()'), self.onBtn1) self.connect(self.btn2, QtCore.SIGNAL('clicked()'), self.onBtn2) def onBtn1(self): self.ctrl = ControlThread(self.txt) self.ctrl.setDaemon(True) self.ctrl.start() def onBtn2(self): self.ctrl.stop() app = QtGui.QApplication(sys.argv) mywindow = MyWindow() mywindow.show() app.exec_()
Python -- 网络编程 -- Socket简单网络通信的更多相关文章
- Python网络编程-Socket简单通信(及python实现远程文件发送)
学习python中使用python进行网络编程,编写简单的客户端和服务器端进行通信,大部分内容来源于网络教程,这里进行总结供以后查阅. 先介绍下TCP的三次握手: 1,简单的发送消息: 服务器端: i ...
- Python网络编程socket
网络编程之socket 看到本篇文章的题目是不是很疑惑,what is this?,不要着急,但是记住一说网络编程,你就想socket,socket是实现网络编程的工具,那么什么是socket,什么是 ...
- Day07 - Python 网络编程 Socket
1. Python 网络编程 Python 提供了两个级别访问网络服务: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口 ...
- python网络编程-socket编程
一.服务端和客户端 BS架构 (腾讯通软件:server+client) CS架构 (web网站) C/S架构与socket的关系: 我们学习socket就是为了完成C/S架构的开发 二.OSI七层 ...
- python网络编程socket /socketserver
提起网络编程,不同于web编程,它主要是C/S架构,也就是服务器.客户端结构的.对于初学者而言,最需要理解的不是网络的概念,而是python对于网络编程都提供了些什么模块和功能.不同于计算机发展的初级 ...
- python --- 网络编程Socket
网络编程 定义:所为网络编程即是对信息的发送和接收. 主要工作: (1)发送端:将信息以规定的协议组装成数据包. (2)接收端:对收到的数据包解析,以提取所需要的信息. Socket:两个在网络上的程 ...
- python网络编程——socket基础篇
python的网络编程比c语言简单许多, 封装许多底层的实现细节, 方便程序员使用的同时, 也使程序员比较难了解一些底层的东西. 1 TCP/IP 要想理解socket,首先得熟悉一下TCP/IP协议 ...
- Python 网络编程——socket
一 客户端/服务器架构 客户端(Client)服务器(Server)架构,即C/S架构,包括 1.硬件C/S架构(打印机) 2.软件C/S架构(web服务) 理想/目标状态—— 最常用的软件服务器是 ...
- Day10 Python网络编程 Socket编程
一.客户端/服务器架构 1.C/S架构,包括: 1.硬件C/S架构(打印机) 2.软件C/S架构(web服务)[QQ,SSH,MySQL,FTP] 2.C/S架构与socket的关系: 我们学习soc ...
随机推荐
- 20155319 2016-2017-2 《Java程序设计》第九周学习总结
20155319 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 整合数据库 ==16.1.1 JDBC简介== JDBC全名Java DataBase Co ...
- hdu 1164 Eddy's research I
http://acm.hdu.edu.cn/showproblem.php?pid=1164 题意很简单,只是写代码的时候需要注意几个问题 一.筛选素数的时候记得用埃式筛选法,要是直接找可能会WA. ...
- 从数据库到NoSQL思路整理
1. 数据库为什么要算范式?细说起来太多. 范式解决了数据冗余,从而保证ACID的操作性能.不然一堆删除异常,插入异常,就没法愉快的写SQL了 另外,对于多个业务公用的数据库,范式解决了集成的问题. ...
- ORACLE EBS xml publisher 报表输出字符字段前部"0"被EXCEL自动去掉问题
http://www.cnblogs.com/lzsu1989/archive/2012/10/17/2728528.html Oracle EBS 提供多种报表的开发和输出形式,由于MS Ex ...
- EBS Webservice Timeout,HTTP Server Return "500 Internal Server Error"
http://blog.itpub.net/26687597/viewspace-1207571/ 基于Oracle EBS R12,开发了一个Webservice用于返回某项主数据,当请求的数据量非 ...
- EBS查找当前Form文件
http://www.cnblogs.com/benio/archive/2011/06/10/2077289.html 我们经常会要在ORACLE EBS中寻找我们正在浏览的form页面的执行文件, ...
- eclipse/myeclipse清除workspace
打开Eclipse后,选择功能菜单里的 Windows -> Preferences->, 弹出对话框后,选择 General -> Startup and Shutdownwor ...
- Android 实现界面(Activity)的跳转
界面跳转 如,我想重一个界面A跳转到界面B,可以用,setContentView(R.layout.activity_login); 但是他其实只是将改界面铺在了最顶层,而按menu这些菜单其实还是底 ...
- Postgresql 锁查看
之前版本 PostgreSQL 的 pg_stat_activity 视图的 waiting 字段判断会话是否等待锁资源(通俗地讲, waiting 值为true表示申请不到锁资源处于等待状态),但是 ...
- <mvc:annotation-driven />到底帮我们做了啥
一句 <mvc:annotation-driven />实际做了以下工作:(不包括添加自己定义的拦截器) 我们了解这些之后,对Spring3 MVC的控制力就更强大了,想改哪就改哪里. s ...