最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python與Java間Socket通信實例代碼

 更新時間:2017年03月06日 17:13:23   投稿:lqh  
這篇文章主要介紹了Python與Java間Socket通信實例代碼的相關(guān)資料,需要的朋友可以參考下

Python與Java間Socket通信

  之前做過一款Java的通訊工具,有發(fā)消息發(fā)文件等基本功能.可大家也都知道Java寫的界面無論是AWT或Swing,那簡直不是人看的,對于我們這些開發(fā)人員還好,如果是Release出去給用戶看,那必須被鄙視到底.用C++的話,寫的代碼也是非常多的(QT這方面做得很好!),但我這里改用Python,以便到時用wxPython做界面.而且這兩者跨平臺也做得非常好.

  這里只給出核心實現(xiàn)以及思路

  Server(Java)接收從Clinet(Python)發(fā)送來的文件

  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));
      // 從客戶端讀取發(fā)送過來的文件名
      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 {
      // 服務端就不要手賤 關(guān)了socket否則Python 會出現(xiàn)錯誤Errno 10054讓客戶端關(guān)掉就行啦
      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字節(jié)是為了給服務端發(fā)送文件名 一定要加上'\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()

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • python裝飾器相當于函數(shù)的調(diào)用方式

    python裝飾器相當于函數(shù)的調(diào)用方式

    今天小編就為大家分享一篇python裝飾器相當于函數(shù)的調(diào)用方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python實現(xiàn)合并同一個文件夾下所有PDF文件的方法示例

    Python實現(xiàn)合并同一個文件夾下所有PDF文件的方法示例

    這篇文章主要介紹了Python實現(xiàn)合并同一個文件夾下所有PDF文件的方法,涉及Python針對pdf文件的讀取、判斷、解密、寫入合并等相關(guān)操作技巧,需要的朋友可以參考下
    2018-04-04
  • Python中的 dir() 函數(shù)示例詳解

    Python中的 dir() 函數(shù)示例詳解

    dir()函數(shù)是Python 中一個非常有用的工具,可以用于查找對象的所有屬性和方法,如獲取當前作用域的變量和方法、查找模塊中的導出內(nèi)容、動態(tài)查找對象屬性等,通過本文的介紹和示例代碼,大家可以更全面地了解 dir() 函數(shù)的用法和注意事項,需要的朋友參考下吧
    2022-03-03
  • Python實現(xiàn)TXT數(shù)據(jù)轉(zhuǎn)三維矩陣

    Python實現(xiàn)TXT數(shù)據(jù)轉(zhuǎn)三維矩陣

    在數(shù)據(jù)處理和分析中,將文本文件中的數(shù)據(jù)轉(zhuǎn)換為三維矩陣是一個常見的任務,本文將詳細介紹如何使用Python實現(xiàn)這一任務,感興趣的小伙伴可以了解下
    2024-01-01
  • Python批量轉(zhuǎn)換文件編碼格式

    Python批量轉(zhuǎn)換文件編碼格式

    需要將工作目錄下的文件進行轉(zhuǎn)碼,開始的編碼是GBK的,需要將其轉(zhuǎn)換為utf-8的。文件較多,手動轉(zhuǎn)換肯定不行,用Python寫個腳本來實現(xiàn)。
    2015-05-05
  • python3利用tcp實現(xiàn)文件夾遠程傳輸

    python3利用tcp實現(xiàn)文件夾遠程傳輸

    這篇文章主要為大家詳細介紹了python3利用tcp實現(xiàn)文件夾遠程傳輸,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Python中os模塊的12種用法總結(jié)

    Python中os模塊的12種用法總結(jié)

    OS?(?Operating?System?操作系統(tǒng)?)?操作系統(tǒng)模塊;它是屬于python的標準庫,常用于處理文件和目錄(文件夾)的操作。本文為大家總結(jié)了這個模塊的12種用法,希望有所幫助
    2022-08-08
  • python畫出三角形外接圓和內(nèi)切圓的方法

    python畫出三角形外接圓和內(nèi)切圓的方法

    這篇文章主要為大家詳細介紹了python畫出三角形外接圓和內(nèi)切圓的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Python中為什么要用self探討

    Python中為什么要用self探討

    這篇文章主要介紹了Python中為什么要用self探討,本文講解了Python要self的理由、為何Python給self賦值而你不必給self賦值?等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • 提高Matplotlib繪圖清晰度的幾種方法

    提高Matplotlib繪圖清晰度的幾種方法

    使用python中的matplotlib.pyplot繪圖的時候,如果將圖片顯示出來,或者另存為圖片,常常會出現(xiàn)清晰度不夠的問題,當然這種問題是對于png或者jpg這種格式的圖片而言的,所以本文給大家介紹了提高Matplotlib繪圖清晰度的幾種方法,需要的朋友可以參考下
    2024-01-01

最新評論

雷州市| 赤城县| 景洪市| 双辽市| 淳化县| 英德市| 桐乡市| 邓州市| 遵义县| 葫芦岛市| 贵定县| 陆丰市| 高陵县| 安化县| 鄯善县| 三明市| 红安县| 祁连县| 康平县| 太仆寺旗| 富阳市| 永春县| 青冈县| 眉山市| 报价| 香港| 荔浦县| 图片| 屯门区| 南澳县| 文安县| 龙州县| 天长市| 荆州市| 和静县| 当雄县| 宝清县| 揭阳市| 竹北市| 讷河市| 南城县|