【脚本语言系列】关于Python网络编程socket,你需要知道的事
来源:互联网 发布:阿里云企业邮箱 smtp 编辑:程序博客网 时间:2024/06/06 12:21
如何使用Python socket
使用socket模块建立网络通讯
编写代码
- 网络通讯服务器
# coding:utf-8 #import Tkinterimport threadingimport socketclass ListenThread(threading.Thread): def __init__(self, edit, server): threading.Thread.__init__(self) self.edit = edit self.server = server def run(self): while 1: try: client, addr = self.server.accept() self.edit.insert(Tkinter.END,"connect from:%s:%d\n" % addr) data = client.recv(1024) self.edit.insert(Tkinter.END,"receive from:%s\n" % data) client.send("I GOT: %s" %data) client.close() self.edit.insert(Tkinter.END,"close client\n") except: self.edit.insert(Tkinter.END,"close client\n") breakclass Control(threading.Thread): def __init__(self, edit): threading.Thread.__init__(self) self.edit = edit self.event = threading.Event() self.event.clear() def run(self): server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind(("",1051)) server.listen(1) self.edit.insert(Tkinter.END, "Waiting For Connection\n") self.lt = ListenThread(self.edit,server) self.lt.setDaemon(True) self.lt.start() self.event.wait() server.close() def stop(self): self.event.set()class Window: def __init__(self, root): self.root = root self.butlisten = Tkinter.Button(root, text = "Start Listening", command = self.Listen) self.butlisten.place(x = 20, y = 15) self.butclose = Tkinter.Button(root, text = "Stop Listen", command = self.Close) self.butclose.place(x = 120, y = 15) self.edit = Tkinter.Text(root) self.edit.place(y = 50) def Listen(self): self.ctrl = Control(self.edit) self.ctrl.setDaemon(True) self.ctrl.start() def Close(self): self.ctrl.stop()root = Tkinter.Tk()window = Window(root)root.mainloop()
2. 网络通讯客户端
# coding:utf-8 #import Tkinterimport socketclass Window: def __init__(self, root): label1 = Tkinter.Label(root, text = 'IP') label2 = Tkinter.Label(root, text = 'Port') label3 = Tkinter.Label(root, text = 'Data') label1.place(x = 5, y = 5) label2.place(x = 5, y = 30) label3.place(x = 5, y = 55) self.entryIP = Tkinter.Entry(root) self.entryIP.insert(Tkinter.END, "127.0.0.1") self.entryPort = Tkinter.Entry(root) self.entryPort.insert(Tkinter.END, '1051') self.entryData = Tkinter.Entry(root) self.entryData.insert(Tkinter.END, 'Hello') self.Recv = Tkinter.Text(root) self.entryIP.place(x = 40, y = 5) self.entryPort.place(x=40, y = 30) self.entryData.place(x=40, y = 55) self.Recv.place(y = 105) self.send = Tkinter.Button(root, text = 'Send Data', command = self.Send) self.send.place(x = 40, y = 80) def Send(self): try: ip = self.entryIP.get() port = int(self.entryPort.get()) data = self.entryData.get() client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect((ip, port)) client.send(data) rdata = client.recv(1024) self.Recv.insert(Tkinter.END, 'Server:'+rdata+'\n') client.close() except: self.Recv.insert(Tkinter.END, "Send Error\n")root = Tkinter.Tk()windwo = Window(root)root.mainloop()
使用服务器和客户端
- 开启服务器;打开监听
- 开启客户端;发送字符
- 服务器监听;接收字符
在局域网中传输文件
编写代码
- 文件传输服务器
# coding:utf-8 #import Tkinterimport threadingimport socketimport osclass ListenThread(threading.Thread): def __init__(self, edit, server): threading.Thread.__init__(self) self.edit = edit self.server = server # self.files = ['FileServer.py'] def run(self): while 1: try: client, addr = self.server.accept() self.edit.insert(Tkinter.END,"connect from:%s:%d\n" % addr) data = client.recv(1024) # self.edit.insert(Tkinter.END,"receive File:%s\n" % data) file = os.open(data, os.O_WRONLY|os.O_CREAT|os.O_EXCL|os.O_BINARY) while 1: rdata = self.client.recv(1024) if not rdata: break os.write(file, rdata) os.close(file) self.client.close() self.edit.insert(Tkinter.END, 'close client\n') except: self.edit.insert(Tkinter.END, 'close client\n') breakclass Control(threading.Thread): def __init__(self, edit): threading.Thread.__init__(self) self.edit = edit self.event = threading.Event() self.event.clear() def run(self): server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind(("",1051)) server.listen(1) self.edit.insert(Tkinter.END, "Waiting For Connection\n") self.lt = ListenThread(self.edit,server) self.lt.setDaemon(True) self.lt.start() self.event.wait() server.close() def stop(self): self.event.set()class Window: def __init__(self, root): self.root = root self.butlisten = Tkinter.Button(root, text = "Start Listening", command = self.Listen) self.butlisten.place(x = 20, y = 15) self.butclose = Tkinter.Button(root, text = "Stop Listen", command = self.Close) self.butclose.place(x = 120, y = 15) self.edit = Tkinter.Text(root) self.edit.place(y = 50) def Listen(self): self.ctrl = Control(self.edit) self.ctrl.setDaemon(True) self.ctrl.start() def Close(self): self.ctrl.stop()root = Tkinter.Tk()window = Window(root)root.mainloop()
2. 文件传输客户端
# coding:utf-8 #import Tkinterimport tkFileDialogimport socketimport osclass Window: def __init__(self, root): label1 = Tkinter.Label(root, text = 'IP') label2 = Tkinter.Label(root, text = 'Port') # label3 = Tkinter.Label(root, text = 'File') label1.place(x = 5, y = 5) label2.place(x = 5, y = 30) label3.place(x = 5, y = 55) self.entryIP = Tkinter.Entry(root) self.entryIP.insert(Tkinter.END, "127.0.0.1") self.entryPort = Tkinter.Entry(root) self.entryPort.insert(Tkinter.END, '1051') self.entryData = Tkinter.Entry(root) self.entryData.insert(Tkinter.END, 'Hello') self.entryIP.place(x = 40, y = 5) self.entryPort.place(x=40, y = 30) self.entryData.place(x=40, y = 55) # self.send = Tkinter.Button(root, text = 'Send Data', command = self.Send) self.openfile = Tkinter.Button(root, text = 'OpenFile', command = self.Openfile) self.send.place(x = 40, y = 80) self.openfile.place(x = 140, y = 80) def Send(self): try: ip = self.entryIP.get() port = int(self.entryPort.get()) # filename = self.entryData.get() tt = filename.split('/') name = tt[len(tt)-1] client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect((ip, port)) client.send(name) file = os.open(filename, os.O_RDONLY|os.O_EXCL|os.O_BINARY) while 1: data = os.read(file, 1024) if not data: break client.send(data) os.close(file) client.close() except: print "Send Error" def Openfile(self): r = tkFileDialog.askopenfilename(title="Python Tkinter", filetypes = [('All files', '*'),('*.py *.pyw')]) if r: self.entryData.delete(0, Tkinter.END) self.entryData.insert(Tkinter.END, r)root = Tkinter.Tk()windwo = Window(root)root.mainloop()
使用服务器和客户端
- 开启服务器;打开监听
- 开启客户端;发送文件
- 服务器监听;接收文件
什么是Python socket
Python的标准模块中提供了对网络编程的支持。
在Python中,可以使用socket模块进行底层的网络编程,也可以使用Twisted方便地编写网络程序。
阅读全文
0 0
- 【脚本语言系列】关于Python网络编程socket,你需要知道的事
- 【脚本语言系列】关于Python网络通讯socket,你需要知道的事
- 【脚本语言系列】关于Python系统管理,你需要知道的事
- 【脚本语言系列】关于Python容器,你需要知道的事
- 【脚本语言系列】关于Python网络应用Telnet,你需要知道的事
- 【脚本语言系列】关于Python网络应用SNMP,你需要知道的事
- 【脚本语言系列】关于Python网络通讯Twisted网络框架,你需要知道的事
- 【脚本语言系列】关于Python实现网络模式发布-订阅,你需要知道的事
- 【脚本语言系列】关于Python多线程编程StacklessPython,你需要知道的事
- 【脚本语言系列】关于Python多线程编程Threading, 你需要知道的事
- 【脚本语言系列】关于Python基础知识面向对象编程,你需要知道的事
- 【脚本语言系列】关于Python数据库编程ODBC,你需要知道的事
- 【脚本语言系列】关于Python调试报错,你需要知道的事
- 【脚本语言系列】关于Python开发环境搭建,你需要知道的事
- 【脚本语言系列】关于Python数值计算NumPy, 你需要知道的事
- 【脚本语言系列】关于Python测试工具lettuce, 你需要知道的事
- 【脚本语言系列】关于Python测试工具mock, 你需要知道的事
- 【脚本语言系列】关于Python测试工具unittest, 你需要知道的事
- SSH分页(Hibernate实现简单分页查询)
- 你是否真的明白Duble与double
- 智力题
- Intellij IDEA 异常Information:java: javacTask: 源发行版 1.8 需要目标发行版 1.8解决方法
- android基础学习10——Listview的使用及其数据适配
- 【脚本语言系列】关于Python网络编程socket,你需要知道的事
- vim中自动添加文件注释到文本中
- CXTPDockingPane中间有留白
- commons-pool对象池(1)---总结
- 正则表达式 linux shell
- jsp页面360浏览器兼容模式不兼容问题解决方法
- spring 整合mybatis配置 MapperScannerConfigurer,无法读配置文件错误
- php+中文分词scws+sphinx+mysql打造千万级数据全文搜索
- jzoj P1845【汕头市选2014】约数