浙江省高等学校教师教育理论培训

微信搜索“毛凌志岗前心得”小程序

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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()

 

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

posted on 2013-01-03 21:03  lexus  阅读(552)  评论(0编辑  收藏  举报