功能:python 作为服务端代码需要一直保存等待连接状态,即使与客户端断开连接也不能退出。Java作为客户端需要在需要的时间进行连接,不需要的时间断开,本文中显示的定时发送数据给服务端,服务端接收数据后将数据喂入算法模型得到结果,然后再将结果回传客户端。在客户端连接服务端后,需要保持长连接状态。 废话不多说,直接上代码: python 作为服务端 from socket import * import numpy as np BUFSIZ = 1024 ADDR = ("192.168.137.1", 9999) # 主机ip 软件端口号 SIZE = 10 tcpS = socket(AF_INET, SOCK_STREAM) # 创建socket对象 # tcpS.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) # 加入socket配置,重用ip和端口 tcpS.bind(ADDR) # 绑定ip端口号 tcpS.listen(SIZE) # 设置最大链接数 while True: s =1 while True: '''链接循环''' conn, addr = tcpS.accept() print('链接人的信息:', addr) order = conn.recv(1) order_number = str(order, 'UTF-8') print(order_number) if order_number == "1": order2 = conn.recv(1) order_number2 = str(order2, 'UTF-8') print(order_number2) s = "" while True: order3 = conn.recv(1024) if not order3: break order_number3 = str(order3, 'UTF-8') s += order_number3 print("接收数据为",s) import recognize #自己训练模型,识别返回结果的函数。放在这是因为每次识别都需要重新加载模型,不然再次输入数据就会报错 data = np.random.random((1, 1, 200, 8)) # todo 数据接入口 recognize = recognize.get_recognize(data) # todo 喂入模型,得到识别结果 conn.send(recognize.encode("UTF-8")) conn.close() tcpS.close()
java客户端
import java.io.*;
import java.net.Socket;
public class SocketClient {
public static void main(String args[]) throws Exception {
InputStreamReader isr;
BufferedReader br;
// 要连接的服务端IP地址和端口
String host = "192.168.137.1";
int port = 9999;
String order = "1" ;
String message = "2eeee";
//与服务端建立连接
// 获取输出流
while (true){
Socket socket = new Socket(host, port);
Thread.sleep(1000*2);
OutputStream outputStream = socket.getOutputStream();
PrintWriter pWriter = new PrintWriter(outputStream);
pWriter.write(order+message);
pWriter.flush();
//通过shutdownOutput高速服务器已经发送完数据,后续只能接受数据
socket.shutdownOutput();
// 获得输入流
isr = new InputStreamReader(socket.getInputStream());
br = new BufferedReader(isr);
System.out.println(br.readLine());
}};
运行之后的结果是:
python端
Java 端