使用python中的socket实现服务器和客户端,并完成图片的传输。
2018年03月09日 16:05:23

阅读数:301

socket服务器代码:

[python] view plaincopy
  1. import socket
  2. import os
  3. sk=socket.socket()
  4. print(sk)
  5. address=('127.0.0.1',8000)
  6. sk.bind(address)     #将本地地址与一个socket绑定在一起
  7. sk.listen(3)          #最多允许有3个客户称呼
  8. print('waiting........ ')
  9. BASE_DIR = os.path.dirname(os.path.abspath(__file__))     #26:11,当前目录
  10. while 1:
  11. conn,addr = sk.accept()
  12. while 1:
  13. # client = conn
  14. data = conn.recv(1024)       #缓冲区大小,接收文件的个数               第一次获取请求
  15. # client.send("HTTP/1.1 200 OK\r\n\r\n".encode("utf8"))
  16. # client.send("<h1 style='color:red'>Hello,yuan</h1>".encode("utf8"))
  17. cmd,filename,filesize=str(data,'utf8').split('|')   #第一次提取请求信息,获取  post name size
  18. #filesize = os.stat(data)
  19. path = os.path.join(BASE_DIR,'MNIST_80',filename)
  20. filesize=int(filesize)
  21. f = open(path,'ab')
  22. has_receive=0
  23. while has_receive!=filesize:
  24. data=conn.recv(1024)                        #第二次获取请求,这次获取的就是传递的具体内容了,1024为文件发送的单位
  25. f.write(data)
  26. has_receive+=len(data)
  27. f.close()

socket客户端代码:

[python] view plaincopy
  1. import socket
  2. import os
  3. sk = socket.socket()
  4. print(sk)
  5. address=('127.0.0.1',8000)
  6. sk.connect(address)
  7. BASE_DIR = os.path.dirname(os.path.abspath(__file__))
  8. while True:
  9. inp=input('>>>>>>>>')    #post|11.png
  10. cmd,path=inp.split('|')                         #拿到post,以及文件11.jpg
  11. path=os.path.join(BASE_DIR,path)
  12. filename = os.path.basename(path)
  13. file_size = os.stat(path).st_size
  14. file_info='post|%s|%s'%(filename,file_size)      #split获取字符串的信息       以此方式打包,依次为   cmd/name/size
  15. sk.sendall(bytes(file_info,'utf8'))                #第一次发送请求,不是具体内容,而是先发送数据信息
  16. f = open(path,'rb')
  17. has_sent=0
  18. while has_sent!=file_size:
  19. data = f.read(1024)
  20. sk.sendall(data)                              #发送真实数据
  21. has_sent+=len(data)
  22. f.close()
  23. print('上传成功')
在socket上,完全没有问题,获取的数据,都为unicode,直接写入到文件里,如果读取大小 设置充足的话,就会将图片读取出来。但是,用同样的一张图,从微信小程序发送过来,会添加上一些其他信息,直接读取,就没有办法将图片读取出来了。
数据传送的时候,先转换成bytes文件,接收的时候再转化为str,才能识别文字信息。小程序这到底怎么搞啊。?

下面是我,修改的更为简单的socket服务器。。

[python] view plaincopy
  1. import socket
  2. import os
  3. sk=socket.socket()
  4. print(sk)
  5. address=('127.0.0.1',8000)
  6. sk.bind(address)     #将本地地址与一个socket绑定在一起
  7. sk.listen(3)          #最多允许有3个客户称呼
  8. print('waiting........ ')
  9. BASE_DIR = os.path.dirname(os.path.abspath(__file__))     #26:11,当前目录
  10. while 1:
  11. conn,addr = sk.accept()
  12. while 1:
  13. filename = '123456789.jpg'
  14. path = os.path.join(BASE_DIR,'MNIST_80',filename)
  15. f = open(path,'ab')
  16. data=conn.recv(50000)
  17. f.write(data)
  18. f.close()
  19. print(data)                #图片数据
  20. #print(type(data))
2018.3.12微信小程序想用python传输,还是只能接收到一堆别的东西。。貌似是json格式啊??我也不懂,准备下午转战java试试吧,毕竟教程比较多。。。。。

使用python中的socket实现服务器和客户端,并完成图片的传输相关推荐

  1. python 指定dns服务器,如何在python中设置本地DNS服务器

    你可以这样做:import socket name = raw_input("hostname:") if name == "mpapp.nobies.in": ...

  2. 用python模拟多人聊天服务器以及客户端(带图形化界面)

    所用python的知识点: 网络编程:socket 多线程:threading 图形化编程:tkinter 首先要模拟出一个服务器,以供客户端连接,注意这里的要用死循环,要让服务区一直处于开放的状态 ...

  3. java socket 编程 客户机服务器_Java Socket编程服务器响应客户端实例代码

    通过输入流来读取客户端信息,相应的时候通过输出流来实现. 服务端类的代码: import java.io.BufferedReader; import java.io.IOException; imp ...

  4. 使用python中PIL库进行切图时候出现了图片全黑

    使用PIL的Image切图时候图片全黑 不知道大家有没有遇见这样得问题,使用python中PIL库进行切图时候出现了图片全黑得现象 今天写了个切图得代码,但是得到得图片是全黑的,像这样的情况: 不知道 ...

  5. java服务端代码_Java Socket编程服务器响应客户端实例代码

    通过输入流来读取客户端信息,相应的时候通过输出流来实现. 服务端类的代码: import java.io.BufferedReader; import java.io.IOException; imp ...

  6. Socket编程服务器和客户端【重要】

    socket编程服务器和客户端[重要] 看过很多网上大神们写的socket,无论复杂或是简洁,感觉对于新手都不是很友好,写的步骤和过程描述得不是很清晰,最近又想起来要写一写,就当做个笔记吧~ 不多说! ...

  7. Python核心编程(第3版)第2章网络编程中关于tcp/udp服务器和客户端实现代码的运行出错的修正

    在Python核心编程(第3版)第2章网络编程中, 关于tcp/udp服务器和客户端实现代码的运行会出现 ['str' does not support the buffer interface]之类 ...

  8. python 中的socket模块——网络编程(一)

    传输协议: 一个完整的计算机由硬件.操作系统.应用软件组成,具备者三个条件,一台计算机可以进行简单的单机游戏:扫雷等等,如果想要和别人一起玩,就需要上网了,甚麽是互联网?互联网的核心就是由一堆协议组成 ...

  9. Java使用Socket实现服务器与客户端通信

    最近在写一个Android 网络局域网通信功能,客户端将数据发送到服务器后,服务器再将这个数据转发给其他客户端为了方便起见,写了一个工具类,废话不多说,上代码,这段代码是基于Gson 的,需要在And ...

最新文章

  1. 各种光学仪器成像技术(上)
  2. DP专题训练之HDU 1087 Super Jumping!
  3. 从一个登录页面浅淡MVVM(二)
  4. mysql 字段唯一效率_对于同一个字段使用唯一性索引和非唯一性索引,效率有区别吗???...
  5. 4.5 NiN CNN、tensorflow实现——python实战
  6. Java异常Error和Exception
  7. oracle 方案概念
  8. pixmap和label设置图片自适应大小
  9. Summarize 2014 Look Ahead 2015
  10. 表白网页在线制作-我要表白网-最浪漫的表白网页在线生成网站
  11. 用Python合并文件夹下所有pdf文件(包括多级子目录下的pdf文件)
  12. nginx 配置为play!的前端http服务器
  13. 【项目】好用快搜文档搜索工具
  14. YOLO目标检测之IOU计算及其衍变体
  15. 查看Linux服务器内存和cpu核数
  16. 大数据具有哪些特征?大数据具有哪些特征?
  17. Python流程控制下:循环语句
  18. iOS AVplayer 基本使用方法
  19. Cocos2dx升级支持 android 64位架构
  20. 【九】Java接口思维导图

热门文章

  1. 常见的面试思考题(MARK)
  2. php {template header},php通过header发送自定义数据
  3. 邵阳计算机专业哪家最好,邵阳学院专业排名 最好的专业有哪些
  4. linux内核 fat,微软宣布exFAT文件系统规范,希望被Linux内核接纳
  5. java soap附件_java - 附件在SoapUI中工作,但在Java中不能使用SAAJ API吗? - 堆栈内存溢出...
  6. java中字符流 字节流_理解Java中字符流与字节流的区别
  7. android怎么判断程序进入了后台,Android检测应用程序是否进入后台
  8. java中什么是反转_Java中如何将字符串反转
  9. 计算机培训专业中心架,国家高技能人才培养车工培训方案.doc
  10. 为什么大厂们一边在疯狂裁员,一边又在大量招人?