• Python爱好者 socket模块传输文件


    Python爱好者 socket模块传输文件 -

    socket模块传输文件

    热度 1已有 32 次阅读2012-10-31 14:14 |个人分类:python| socket, 传送文件

    在python中,socket 模块为开发人员提供了底层网络接口,开发人员可以用socket模块实现底层的基本网络通信。

    Socket 模块提供了 UNIX 程序员所熟悉的基本网络服务(也称为 BSD API)。这个模块中提供了在构建 socket 服务器和客户机时所需要的所有功能。

    这个 API 与标准的 C API 之间的区别在于它是面向对象的。在C中,socket描述符是从socket调用中获得的,然后会作为一个参数传递给BSD API函数。在Python中,socket 方法会向应用socket方法的对象返回一个socket对象。

    以下是一篇利用socket模块传输文件的代码:

    客户端(发送文件):

    #!/usr/bin/python
    #coding=utf-8

    import socket
    import thread
    import wx

    class Sender():

        def __init__(self):
            self.__s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

        def setIP(self,ip):
            self.__ip = ip
            self.__s.connect((self.__ip,9807))

        def sendMsg(self,s):
            self.__s.send(s)

    class MyFrame(wx.Frame):

        def __init__(self,parent,id):
            wx.Frame.__init__(self,parent,id,'聊天室客户端',size=(200,100))#实例化窗口
            self.__p = wx.TextCtrl(self,pos = (10,10),size = (100,20)) #实例化文本框
            self.__f = wx.TextCtrl(self,pos = (10,30),size = (100,20)) #实例化文本框
            self.__p.SetValue('127.0.0.1')
            #self.__m = wx.TextCtrl(self,pos = (10,60),size = (100,300))
            l = wx.Button(self,label='连接',pos = (120,10),size = (50,20))#实例化按钮
            b = wx.Button(self,label='发送',pos = (120,30),size = (50,20))#实例化按钮
            self.Bind(wx.EVT_BUTTON, self.OnLog, l)
            self.Bind(wx.EVT_BUTTON,self.OnSend,b)#绑定事件
            self.__s = Sender()
      
        def OnLog(self,event):
            self.__s.setIP(self.__p.GetValue())

        def OnSend(self,event):#定义一个按钮事件
            f = file(self.__f.GetValue(),'r')
            self.__s.sendMsg(f.read())
            f.close()

    class MyApp(wx.App): #定义wx.App的子类
        def OnInit(self): #
            frame = MyFrame()
            frame.Show()
            return True

    app = wx.App()
    app.MainLoop()

    服务器端(接收文件):

    #!/usr/bin/python
    #coding=utf-8
    ##@Author 张亚军
    ##@Date 2012-10-30

    import socket
    import time

    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    s.bind(('127.0.0.1',9807))#监听本地端口
    s.listen(3)

    while True:
        conn,addr = s.accept()
        while True:
            data = conn.recv(8192)
            if not data:
                break
            f = file('D:\\data\\'+str(time.time())+'.txt','w')
            f.write(data)
            f.flush()
            f.close()
            print '成功'

    s.close()

    主要思想就是在客户端把文件读成字符串,发送到服务器端之后服务器把得到的字符串写入文件

  • 相关阅读:
    作业day17
    python开发学习day17 (生成器;面向过程;三元表达式;生成式,内置函数)
    作业day16
    python开发学习day16 (三层装饰器;迭代器)
    python开发学习day15 (叠加装饰器;递归调用;匿名函数)
    作业day14
    python开发学习day14 (装饰器;语法糖;装饰器模板)
    python开发学习day13 (函数嵌套;名称空间与作用域;闭包函数)
    作业day12
    Python-简单算法程序
  • 原文地址:https://www.cnblogs.com/lexus/p/2843349.html
Copyright © 2020-2023  润新知