java数据采集和python_将数据从Java程序传递到Python程序并获得结果b

几个月前,当我遇到类似的问题时,我就把它砍掉了。我避开了Jython,因为我想要单独的过程。Java代码是服务器,因为它侦听请求,但失败时不会重新连接。其概念是,类是具有套接字成员的扩展线程,因此发送和接收命令可以阻止对象线程并使主机线程不受影响。

Python代码:import StringIO

import re

import select

import socket

import sys

import threading

class IPC(threading.Thread):

def __init__(self, line_filter = None):

threading.Thread.__init__(self)

self.daemon = True

self.lock = threading.Lock()

self.event = threading.Event()

self.event.clear()

self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

self.recv_buffer_size = 8192

self.buffer = StringIO.StringIO()

if(line_filter == None):

self.line_filter = lambda x: x

else:

self.line_filter = line_filter

def run(self):

self.sock.connect(("localhost", 32000))

data = True

while data:

try:

data = self.sock.recv(self.recv_buffer_size)

except socket.error, e:

print e

self.sock.close()

break

self.lock.acquire()

self.buffer.write(data)

self.lock.release()

self.event.set()

def readlines(self):

self.lock.acquire()

self.buffer.seek(0)

raw_lines = self.buffer.readlines()

self.buffer.truncate(0)

self.lock.release()

lines = map(self.line_filter, raw_lines)

return lines

proc_control = IPC()

while True:

proc_control.event.wait()

data = proc_control.readlines()

if(data):

# Do Stuff

proc_control.event.clear()

Java代码:

SocketIPC.java:package project;

import java.net.Socket;

import java.net.ServerSocket;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.PrintWriter;

import java.io.OutputStreamWriter;

import java.io.InputStreamReader;

import java.util.ArrayList;

import java.util.List;

public class SocketIPC {

public PrintWriter out;

public BufferedReader in;

Socket socket = null;

ServerSocket serverSocket = null;

ConnectionListener connlisten = null;

DataListener datalisten = null;

Thread connlisten_thread = null;

Thread datalisten_thread = null;

CommandObject ipc_event_cmd = null;

// Server thread accepts incoming client connections

class ConnectionListener extends Thread {

private int port;

ConnectionListener(int port) {

this.port = port;

}

@Override

public void run() {

try {

serverSocket = new ServerSocket(port);

socket = serverSocket.accept();

out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);

in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

datalisten = new DataListener();

datalisten_thread = new Thread(datalisten);

datalisten_thread.start();

} catch (Exception e) {

System.err.println("SocketIPC creation error: " + e.getMessage());

}

}

}

// Server thread accepts incoming client connections

class DataListener extends Thread {

String data_str = null;

DataListener() {

}

@Override

public void run() {

try {

while(true) {

data_str = recv();

ipc_event_cmd.buffer.add(data_str);

ipc_event_cmd.execute();

}

} catch (Exception e) {

System.err.println("SocketIPC reading error: " + e.getMessage());

}

}

public String read() {

String ret_string = null;

if(!ipc_event_cmd.buffer.isEmpty()) {

ret_string = ipc_event_cmd.buffer.remove(0);

}

return ret_string;

}

}

public SocketIPC(int port) {

ipc_event_cmd = new CommandObject();

connlisten = new ConnectionListener(port);

connlisten_thread = new Thread(connlisten);

connlisten_thread.start();

}

public void send(String msg) {

if (out != null) {

out.println(msg);

}

}

public void flush() {

if (out != null) {

out.flush();

}

}

public void close() {

if (out != null) {

out.flush();

out.close();

try {

in.close();

socket.close();

serverSocket.close();

} catch (Exception e) {

System.err.println("SocketIPC closing error: " + e.getMessage());

}

}

}

public String recv() throws Exception {

if (in != null) {

return in.readLine();

} else {

return "";

}

}

public void set_cmd(CommandObject event_cmd) {

if (event_cmd != null) {

this.ipc_event_cmd = event_cmd;

}

}

}

CommandObject.java:package project;

import java.util.List;

import java.util.ArrayList;

public class CommandObject {

List buffer;

public CommandObject() {

this.buffer = new ArrayList();

}

public void execute() {

}

}

DoStuff.java版本:package project;

import java.util.List;

import java.util.ArrayList;

import java.util.Map;

import java.util.HashMap;

import java.util.Random;

public class DoStuff extends CommandObject {

public DoStuff () {

}

@Override

public void execute() {

String tmp_string = null;

while (!buffer.isEmpty()) {

tmp_string = buffer.remove(0);

// Do Stuff

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值