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 相关文章推荐
解决python3中cv2读取中文路径的问题
Dec 05 Python
python最小生成树kruskal与prim算法详解
Jan 17 Python
Python 抓取微信公众号账号信息的方法
Jun 14 Python
python爬虫之快速对js内容进行破解
Jul 09 Python
初次部署django+gunicorn+nginx的方法步骤
Sep 11 Python
flask 框架操作MySQL数据库简单示例
Feb 02 Python
解决Python Matplotlib绘图数据点位置错乱问题
May 16 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
May 21 Python
Python中socket网络通信是干嘛的
May 27 Python
keras使用Sequence类调用大规模数据集进行训练的实现
Jun 22 Python
Python collections模块的使用方法
Oct 09 Python
Python解析m3u8拼接下载mp4视频文件的示例代码
Mar 03 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
漫威DC即将合作联动,而双方早已经秘密开始
2020/04/09 欧美动漫
ThinkPHP3.1之D方法实例详解
2014/06/20 PHP
php版微信自动获取收货地址api用法示例
2016/09/22 PHP
PHP ajax+jQuery 实现批量删除功能实例代码小结
2018/12/06 PHP
浅谈PHP匿名函数和闭包
2019/03/08 PHP
js中如何把字符串转化为对象、数组示例代码
2013/07/17 Javascript
jQuery新的事件绑定机制on()示例应用
2014/07/18 Javascript
JavaScript中的console.group()函数详细介绍
2014/12/29 Javascript
深入分析Cookie的安全性问题
2015/03/01 Javascript
javascript如何实现360度全景照片问题汇总
2016/04/04 Javascript
Bootstrap轮播插件简单使用方法介绍
2016/06/21 Javascript
echarts3 使用总结(绘制各种图表,地图)
2017/01/05 Javascript
jquery.validate表单验证插件使用详解
2017/06/21 jQuery
Vue.js简易安装和快速入门(第二课)
2017/10/17 Javascript
js的函数的按值传递参数(实例讲解)
2017/11/16 Javascript
jQuery实现checkbox的简单操作
2017/11/18 jQuery
ES6中异步对象Promise用法详解
2019/07/31 Javascript
Vue 自定义指令实现一键 Copy功能
2019/09/16 Javascript
Vue基于iview table展示图片实现点击放大
2020/08/05 Javascript
js+canvas实现转盘效果(两个版本)
2020/09/13 Javascript
Python字符串特性及常用字符串方法的简单笔记
2016/01/04 Python
详解 Python 与文件对象共事的实例
2017/09/11 Python
python2与python3中关于对NaN类型数据的判断和转换方法
2018/10/30 Python
python pandas写入excel文件的方法示例
2019/06/25 Python
关于python pycharm中输出的内容不全的解决办法
2020/01/10 Python
尤为Wconcept中国官网:韩国设计师品牌服饰
2019/01/10 全球购物
华为的Java面试题
2014/03/07 面试题
员工评语大全
2014/01/19 职场文书
大三学生学年自我鉴定
2014/09/12 职场文书
法定授权委托证明书
2014/09/27 职场文书
2014年个人委托书范本
2014/10/13 职场文书
研究生导师推荐信
2015/03/25 职场文书
小学六一主持词开场白
2015/05/28 职场文书
房贷工资证明范本
2015/06/12 职场文书
用Python远程登陆服务器的步骤
2021/04/16 Python
手把手教你实现PyTorch的MNIST数据集
2021/06/28 Python