神剑山庄资源网 Design By www.hcban.com
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()
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
神剑山庄资源网 Design By www.hcban.com
神剑山庄资源网
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
神剑山庄资源网 Design By www.hcban.com
暂无Python与Java间Socket通信实例代码的评论...
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
2024年10月03日
2024年10月03日
- 孙悦.1996-伙伴【正大国际】【WAV+CUE】
- 纪钧瀚《钢琴阅读时光 雨中书店聆听轻音乐》[FLAC/分轨][399.62MB]
- 证声音乐图书馆《走向自然 疗心爵士乐》[320K/MP3][87.4MB]
- 证声音乐图书馆《走向自然 疗心爵士乐》[FLAC/分轨][184.94MB]
- 陈慧娴.2018-Priscilla-Ism演唱会3CD(2024环球红馆40复刻系列)【环球】【WAV+CUE】
- 郑秀文.1999-我应该得到(国)【华纳】【WAV+CUE】
- 陈家慧.2011-钢琴酒吧2CD【龙吟唱片】【WAV+CUE】
- 证声音乐图书馆《雨季 蓝调吉他 Rainy Blues》[320K/MP3][45.01MB]
- 证声音乐图书馆《雨季 蓝调吉他 Rainy Blues》[FLAC/分轨][109.13MB]
- 赞多《序章》[320K/MP3][45.54MB]
- 许巍.2004-每一刻都是崭新的【步升大风】【WAV+CUE】
- 群星.2024-四方馆影视原声带【韶愔音乐】【FLAC分轨】
- 陈雷.1997-安锁咧【金圆唱片】【WAV+CUE】
- 关淑怡.2013-MY.FAVORITE.SK.3CD【环球】【WAV+CUE】
- Sweety.2006-花言乔语【丰华】【WAV+CUE】