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类定义和类继承详解
May 08 Python
简单介绍Python中的floor()方法
May 15 Python
Python中处理字符串之endswith()方法的使用简介
May 18 Python
Python实现提取谷歌音乐搜索结果的方法
Jul 10 Python
python遍历文件夹下所有excel文件
Jan 03 Python
pytorch 实现打印模型的参数值
Dec 30 Python
Windows上安装tensorflow  详细教程(图文详解)
Feb 04 Python
Python实现ATM系统
Feb 17 Python
Python类的绑定方法和非绑定方法实例解析
Mar 04 Python
python小程序之4名牌手洗牌发牌问题解析
May 15 Python
简单的Python人脸识别系统
Jul 14 Python
解决Python paramiko 模块远程执行ssh 命令 nohup 不生效的问题
Jul 14 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者的疑难问答(1)
2006/10/09 PHP
php防盗链的常用方法小结
2010/07/02 PHP
PHP文章采集URL补全函数(FormatUrl)
2012/08/02 PHP
php生成N个不重复的随机数实例
2013/11/12 PHP
php中文验证码实现方法
2015/06/18 PHP
thinkPHP+mysql+ajax实现的仿百度一下即时搜索效果详解
2019/07/15 PHP
php+mysql+ajax 局部刷新点赞/取消点赞功能(每个账号只点赞一次)
2020/07/24 PHP
基于jquery的一个浮动框(扩展性比较好 )
2010/08/27 Javascript
javascript实现添加附件功能的方法
2015/11/18 Javascript
基于JS实现的笛卡尔乘积之商品发布
2016/05/13 Javascript
Html5+jQuery+CSS制作相册小记录
2016/12/30 Javascript
微信小程序 欢迎页面的制作(源码下载)
2017/01/09 Javascript
Angular2中select用法之设置默认值与事件详解
2017/05/07 Javascript
js断点调试心得分享(必看篇)
2017/12/08 Javascript
nodejs 简单实现动态html的方法
2018/05/12 NodeJs
jQuery的Ajax接收java返回数据方法
2018/08/11 jQuery
vue项目上传Github预览的实现示例
2018/11/06 Javascript
webpack 处理CSS资源的实现
2019/09/27 Javascript
JS插件amCharts实现绘制柱形图默认显示数值功能示例
2019/11/26 Javascript
跟老齐学Python之开始真正编程
2014/09/12 Python
Django实现图片文字同时提交的方法
2015/05/26 Python
Python正则表达式非贪婪、多行匹配功能示例
2017/08/08 Python
利用python爬取斗鱼app中照片方法实例
2017/12/03 Python
python编写弹球游戏的实现代码
2018/03/12 Python
Python读取YAML文件过程详解
2019/12/30 Python
python 实现分组求和与分组累加求和代码
2020/05/18 Python
利用css3径向渐变做一张优惠券的示例
2018/03/22 HTML / CSS
毕业生求职自荐书范文
2014/03/27 职场文书
2014小学年度工作总结
2014/12/20 职场文书
博士给导师的自荐信
2015/03/06 职场文书
2015年度团总支工作总结
2015/04/23 职场文书
2015年社区科普工作总结
2015/05/13 职场文书
管辖权异议上诉状
2015/05/23 职场文书
心术观后感
2015/06/11 职场文书
2015年城管执法工作总结
2015/07/23 职场文书
python元组打包和解包过程详解
2021/08/02 Python