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 ...
随机推荐
- NHibernate的搭建
1.新建项目 Business:业务逻辑类 Data:数据层,存放数据库的操作及Nhibernate辅助类 Domain:数据实体和数据库映射文件 2.使用NuGet下载Nhibernate 数据库配 ...
- hdu 4982 贪心构造序列
http://acm.hdu.edu.cn/showproblem.php?pid=4982 给定n和k,求一个包含k个不相同正整数的集合,要求元素之和为n,并且其中k-1的元素的和为完全平方数 枚举 ...
- [翻译] Virtual method interception 虚方法拦截
原文地址:http://blog.barrkel.com/2010/09/virtual-method-interception.html 注:基于本人英文水平,以下翻译只是我自己的理解,如对读者造成 ...
- 用NPOI操作EXCEL--巧妙使用Excel Chart
在NPOI中,本身并不支持Chart等高级对象的创建,但通过l模板的方式可以巧妙地利用Excel强大的透视和图表功能,请看以下例子. 首先建立模板文件,定义两列以及指向此区域的名称“sales”: 创 ...
- 自适应XAML布局经验总结 (三) 局部布局设计模式2
本系列对实际项目中的XAML布局场景进行总结,给出了较优化的自适应布局解决方案,希望对大家有所帮助. 下面继续介绍局部布局设计模式. 5. 工具箱模式 绘图,三维模型操作等需要工具的情况,可以使用带分 ...
- Python try/except/finally等
Python try/except/finally等 x = 'abc' def fetcher(obj, index): return obj[index] fetcher(x, 4) 输出: ...
- MVVM前端框架
早开始接触MVVM框架的时候,是在学习WPF的时候,后面陆陆续续接触到了很多的前端JS框架,个人觉得大同小异,也没有去研究源代码,所以都停留在使用的阶段.当然对于我来说,使用这些JS框架,最关注的无非 ...
- ASP.Net Core 2.2 MVC入门到基本使用系列 (一)
本教程会对基本的.Net Core 进行一个大概的且不会太深入的讲解, 在您看完本系列之后, 能基本甚至熟练的使用.Net Core进行Web开发, 感受到.Net Core的魅力. 本教程知识点大体 ...
- 基于RBAC设计的通用权限管理框架
RoadFlow拥有基于RBAC设计的通用权限管理框架.不仅可以基于角色组进行菜单授权,还可以根据组织架构中部门.岗位.人员等进行细分的权限管理分配. 如果一个人有重复菜单权限,则将自动合并. 系统资 ...
- 【mysql】Windows环境搭建(适用5.7以上)
1 下载MySQL 登录 https://dev.mysql.com/downloads/mysql/ 2 配置 下载好了zip文件,解压至任意非中文目录,在根目录下新建my.ini: 输入以下内容( ...