zoukankan      html  css  js  c++  java
  • 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()

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

  • 相关阅读:
    UVA 10618 Tango Tango Insurrection
    UVA 10118 Free Candies
    HDU 1024 Max Sum Plus Plus
    POJ 1984 Navigation Nightmare
    CODEVS 3546 矩阵链乘法
    UVA 1625 Color Length
    UVA 1347 Tour
    UVA 437 The Tower of Babylon
    UVA 1622 Robot
    UVA127-"Accordian" Patience(模拟)
  • 原文地址:https://www.cnblogs.com/lexus/p/2843349.html
Copyright © 2011-2022 走看看