Python与Java间Socket通信实例代码


Posted in Python onMarch 06, 2017

Python与Java间Socket通信

之前做过一款Java的通讯工具,有发消息发文件等基本功能.可大家也都知道Java写的界面无论是AWT或Swing,那简直不是人看的,对于我们这些开发人员还好,如果是Release出去给用户看,那必须被鄙视到底.用C++的话,写的代码也是非常多的(QT这方面做得很好!),但我这里改用Python,以便到时用wxPython做界面.而且这两者跨平台也做得非常好.

这里只给出核心实现以及思路

  Server(Java)接收从Clinet(Python)发送来的文件

JServer.java

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
 
public class JServer implements Runnable {
 
  ServerSocket ss;
 
  public JServer() throws Exception {
    ss = new ServerSocket(8086);
    new Thread(this).start();
  }
 
  @Override
  public void run() {
    int i = 0;
    System.out.println("server startup.");
    while (true) {
      try {
        Socket s = ss.accept();
        // 每个客户端一个处理线程
        new Handler(s, i).start();
        i++;
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
 
  }
 
  public static void main(String[] args) {
    try {
      new JServer();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
 
}
 
class Handler extends Thread {
  Socket s;
  int id;
 
  public Handler(Socket s, int id) {
    this.s = s;
    this.id = id;
  }
 
  @Override
  public void run() {
    System.out.println("in handling..");
 
    FileOutputStream fos = null;
    try {
      InputStream is = s.getInputStream();
      BufferedReader in = new BufferedReader(new InputStreamReader(is));
      // 从客户端读取发送过来的文件名
      String filename = in.readLine();
      System.out.println("read line " + id + " :" + filename);
      File file = new File(filename);
 
      int len = 0;
      int BUFSIZE = 4*1024;
      byte[] by = new byte[BUFSIZE * 1024];
      fos = new FileOutputStream(file);
      while ((len = is.read(by, 0, BUFSIZE)) != -1) {
        fos.write(by, 0, len);
        fos.flush();
      }
      System.out.println("done.");
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      // 服务端就不要手贱 关了socket否则Python 会出现错误Errno 10054让客户端关掉就行啦
      try {
        fos.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }
}

 

Python客户端

# -*- coding: utf-8 -*-
#!/usr/bin/python
#coding=utf-8
import time
import threading
import socket
import os
 
class Client():
  def __init__(self):
    address = ('127.0.0.1', 8086)
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(address)
    fn = 'test.zip'
    ff = os.path.normcase(fn)
 
    try:
      f = open(fn, 'rb')
      sendFile = SendFile(s,f)
      sendFile.start()
      print 'start to send file.'
    except IOError:
      print 'open err'
 
 
class SendFile(threading.Thread):
  def __init__(self, sock, file):
    threading.Thread.__init__(self)
    self.file = file
    self.sock = sock
 
  def run(self):
    print self.file
    BUFSIZE = 1024
    count = 0
    name = self.file.name+'\r'



 # 前1k字节是为了给服务端发送文件名 一定要加上'\r',不然服务端就不能readline了
    for i in range(1, BUFSIZE - len(self.filename) -1):
      name += '?'
    print name
    self.sock.send(name)
    while True:
      print BUFSIZE
      fdata = self.file.read(BUFSIZE)
      if not fdata:
        print 'no data.'
        break
      self.sock.send(fdata)
      count += 1
      if len(fdata) != BUFSIZE:
        print 'count:'+str(count)
        print len(fdata)
      nRead = len(fdata)
 
    print 'send file finished.'
    self.file.close()
    self.sock.close()
    print 'close socket'
 
c = Client()

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Python 相关文章推荐
深入解析Python设计模式编程中建造者模式的使用
Mar 02 Python
Python 中pandas.read_excel详细介绍
Jun 23 Python
python多维数组切片方法
Apr 13 Python
python对象与json相互转换的方法
May 07 Python
python openvc 裁剪、剪切图片 提取图片的行和列
Sep 19 Python
python 矢量数据转栅格数据代码实例
Sep 30 Python
Python中的list与tuple集合区别解析
Oct 12 Python
原生python实现knn分类算法
Oct 24 Python
python else语句在循环中的运用详解
Jul 06 Python
python 实现"神经衰弱"翻牌游戏
Nov 09 Python
python 实现图片批量压缩的示例
Dec 18 Python
用Python远程登陆服务器的步骤
Apr 16 Python
python使用arcpy.mapping模块批量出图
Mar 06 #Python
python与php实现分割文件代码
Mar 06 #Python
windows系统下Python环境的搭建(Aptana Studio)
Mar 06 #Python
windows下安装Python和pip终极图文教程
Mar 05 #Python
python爬虫的工作原理
Mar 05 #Python
python操作mysql数据库
Mar 05 #Python
Windows安装Python、pip、easy_install的方法
Mar 05 #Python
You might like
咖啡磨器 如何选购一台适合家用的意式磨豆机
2021/03/05 新手入门
table标签的结构与合并单元格的实现方法
2013/07/24 PHP
YII中assets的使用示例
2014/07/31 PHP
php中Ctype函数用法详解
2014/12/09 PHP
php中的单引号、双引号和转义字符详解
2017/02/16 PHP
php+mysql+jquery实现简易的检索自动补全提示功能
2017/04/15 PHP
form表单只提交数据而不进行页面跳转的解决方案
2013/09/18 Javascript
JS与C#编码解码
2013/12/03 Javascript
滚动条响应鼠标滑轮事件实现上下滚动的js代码
2014/06/30 Javascript
基于jQuery Bar Indicator 插件实现进度条展示效果
2015/09/30 Javascript
javascript日期验证之输入日期大于等于当前日期
2015/12/13 Javascript
实例讲解JavaScript中的this指向错误解决方法
2016/06/13 Javascript
详解webpack 配合babel 将es6转成es5 超简单实例
2017/05/02 Javascript
Angularjs为ng-click事件传递参数
2017/06/15 Javascript
JS小球抛物线轨迹运动的两种实现方法详解
2017/12/20 Javascript
jQuery中的for循环var与let的区别
2018/04/21 jQuery
echarts同一页面中四个图表切换的js数据交互方法示例
2018/07/03 Javascript
Vue2.0生命周期的理解
2018/08/20 Javascript
进一步理解Python中的函数编程
2015/04/13 Python
Python中的os.path路径模块中的操作方法总结
2016/07/07 Python
简单谈谈Python中的几种常见的数据类型
2017/02/10 Python
OpenCV Python实现拼图小游戏
2020/03/23 Python
python实现密码验证合格程序的思路详解
2020/06/01 Python
通过一张图教会你CSS3倒影的实现
2017/09/26 HTML / CSS
Scholastic父母商店:儿童书籍
2017/01/01 全球购物
公司行政经理岗位职责
2013/12/24 职场文书
大学生村官工作感言
2014/01/10 职场文书
十佳教师事迹材料
2014/01/11 职场文书
八荣八耻的活动方案
2014/08/16 职场文书
领导干部“四风”查摆问题个人整改措施
2014/10/28 职场文书
2014年村委会工作总结
2014/11/24 职场文书
2015学校六五普法工作总结
2015/04/22 职场文书
女性健康知识讲座主持词
2015/07/04 职场文书
致运动员赞词
2015/07/22 职场文书
2019职场单身人才调研报告:互联网行业单身比例最高
2019/08/07 职场文书
Mysql调整优化之四种分区方式以及组合分区
2022/04/13 MySQL