
利用socket实现python和java通信
python java 通信
·
python服务端
import socket
import threading
import json
def main():
# 创建服务器套接字
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 获取本地主机名称
host = "127.0.0.1"
# 设置一个端口
port = 12345
# 将套接字与本地主机和端口绑定
serversocket.bind((host, port))
# 设置监听最大连接数
serversocket.listen(10)
conent = "hello "
print("等待连接")
while True:
# 获取一个客户端连接
clientsocket, addr = serversocket.accept()
print("连接地址:%s" % str(addr))
try:
t = ServerThreading(model, clientsocket) # 为每一个请求开启一个处理线程
t.start()
except Exception as identifier:
print(identifier)
pass
serversocket.close()
pass
class ServerThreading(threading.Thread):
def __init__(self, model, clientsocket, recvsize=1024 * 1024, encoding="utf-8"):
threading.Thread.__init__(self)
self.model = model
self._socket = clientsocket
self._recvsize = recvsize
self._encoding = encoding
pass
def run(self):
print("开启线程.....")
try:
# 接受数据
msg = ''
while True:
# 读取recvsize个字节
rec = self._socket.recv(self._recvsize)
# 解码
msg += rec.decode(self._encoding)
# 文本接受是否完毕,因为python socket不能自己判断接收数据是否完毕,
# 所以需要自定义协议标志数据接受完毕
if msg.strip().endswith('over'):
msg = msg[:-4]
break
# 解析json格式的数据
sendmsg = json.dumps(msg)
print(sendmsg)
# 发送数据
self._socket.send(("%s" % sendmsg).encode(self._encoding))
except Exception as identifier:
self._socket.send("500".encode(self._encoding))
print(identifier)
pass
finally:
self._socket.close()
print("任务结束.....")
if __name__ == "__main__":
main()
java 客户端
package ww.learn;
import java.io.*;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
public class test_client {
private final String HOST = "127.0.0.1";
private final int PORT = 12345;
public List<Float> remoteCall(String path){
// 访问服务进程的套接字
// System.out.println("调用远程接口:host=>"+HOST+",port=>"+PORT);
try(Socket socket = new Socket(HOST, PORT)) {
// 初始化套接字,设置访问服务的主机和进程端口号,HOST是访问python进程的主机名称,可以是IP地址或者域名,PORT是python进程绑定的端口号
// 获取输出流对象
OutputStream os = socket.getOutputStream();
PrintStream out = new PrintStream(os);
// 发送内容
out.print(path);
// 告诉服务进程,内容发送完毕,可以开始处理
out.print("over");
// 获取服务进程的输入流
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is,"utf-8"));
String tmp = null;
StringBuilder sb = new StringBuilder();
// 读取内容
while((tmp=br.readLine())!=null)
sb.append(tmp).append('\n');
// 解析结果
tmp = sb.toString().substring(1, sb.length()-2);
String[] split = tmp.split(",");
List<Float> list = new ArrayList<Float>(split.length);
for (int i = 0; i < split.length; i++) {
list.add(Float.valueOf(split[i]));
split[i] = null;
}
// System.out.println(list);
// System.out.println(list.size());
return list;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) throws IOException {
test_client test_client = new test_client();
List<Float> feature = test_client.remoteCall("1.jpeg");
System.out.println(feature);
}
}
更多推荐



所有评论(0)