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 除法小技巧
Sep 06 Python
python原始套接字编程示例分享
Feb 21 Python
Python的gevent框架的入门教程
Apr 29 Python
Python中使用不同编码读写txt文件详解
May 28 Python
如何准确判断请求是搜索引擎爬虫(蜘蛛)发出的请求
Oct 13 Python
详解在Python程序中自定义异常的方法
Oct 16 Python
python 2.6.6升级到python 2.7.x版本的方法
Oct 09 Python
Python命名空间的本质和加载顺序
Dec 17 Python
Python3.5装饰器典型案例分析
Apr 30 Python
python生成随机红包的实例写法
Sep 02 Python
Python3将jpg转为pdf文件的方法示例
Dec 13 Python
Python 如何安装Selenium
May 06 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
PHP简单判断iPhone、iPad、Android及PC设备的方法
2016/10/11 PHP
JavaScript 继承详解(一)
2009/07/13 Javascript
(jQuery,mootools,dojo)使用适合自己的编程别名命名
2010/09/14 Javascript
跨域请求之jQuery的ajax jsonp的使用解惑
2011/10/09 Javascript
Textbox控件注册回车事件及触发按钮提交事件具体实现
2013/03/04 Javascript
JQuery实现鼠标滑过显示导航下拉列表
2013/09/12 Javascript
JQuery对表单元素的基本操作使用总结
2014/07/18 Javascript
javascript父、子页面交互技巧总结
2014/08/08 Javascript
jQuery实现限制textarea文本框输入字符数量的方法
2015/05/28 Javascript
JavaScript中用getDate()方法返回指定日期的教程
2015/06/09 Javascript
JavaScript编程中的Promise使用大全
2015/07/28 Javascript
微信小程序实现点击按钮移动view标签的位置功能示例【附demo源码下载】
2017/12/06 Javascript
vue组件jsx语法的具体使用
2018/05/21 Javascript
泛谈JS逻辑判断选择器 || &&
2019/05/24 Javascript
解决包含在label标签下的checkbox在ie8及以下版本点击事件无效果兼容的问题
2019/10/27 Javascript
js实现浏览器打印功能的示例代码
2020/07/15 Javascript
原生JavaScript实现拖动校验功能
2020/09/29 Javascript
全面解读Python Web开发框架Django
2014/06/30 Python
机器学习经典算法-logistic回归代码详解
2017/12/22 Python
python实现对指定字符串补足固定长度倍数截断输出的方法
2018/11/15 Python
在django admin详情表单显示中添加自定义控件的实现
2020/03/11 Python
一文带你了解Python 四种常见基础爬虫方法介绍
2020/12/04 Python
java字符串格式化输出实例讲解
2021/01/06 Python
用CSS3绘制三角形的简单方法
2015/07/17 HTML / CSS
css3 transform 3d 使用css3创建动态3d立方体(html5实践)
2013/01/06 HTML / CSS
伊利莎白雅顿官网:Elizabeth Arden
2016/10/10 全球购物
2013年保送生自荐信格式
2013/11/20 职场文书
节约电力资源的建议书
2014/03/12 职场文书
世界读书日的活动方案
2014/08/20 职场文书
县政府办公室领导班子个人对照检查材料
2014/09/16 职场文书
交通局领导班子群众路线教育实践活动对照检查材料思想汇报
2014/10/09 职场文书
2015年学生会干事工作总结
2015/04/09 职场文书
靠谱的活动总结
2019/04/16 职场文书
感恩信:写给爸爸妈妈的一封感谢信
2019/09/12 职场文书
古诗之感恩老师
2019/10/24 职场文书
Java 超详细讲解hashCode方法
2022/04/07 Java/Android