java - 服务器端的Python套接字问题

标签 java python sockets

在 python 服务器上,我计划从 java 客户端接收参数,通过神经网络运行它们并将结果发回。这些消息将是转换为字符串的 numpy 数组,用于通信过程。 然而,我还没有尝试从客户端传递一些虚拟字符串来调用服务器例程,当我发回一个字符串时,一切都很好。但是,当我在循环内调用 mod.predict(arr) 或不将接收到的数据连接到回复时,服务器不会使用react。有谁知道我该如何完成这件事?

服务器 - Python:

HOST = 'localhost'
PORT = 7777
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(10)

while True:
   conn, addr = s.accept()  
   data = conn.recv(1024)+"\r\n"

   pred = mod.predict(arr)

   reply = 'Answer..' + pred + data      # +'\r\n'

   if not data: 
      break

   conn.send(reply)

conn.close()

客户端 - Java:

Socket socket = new Socket("localhost", 7777);
OutputStream out = socket.getOutputStream();
PrintStream ps = new PrintStream(out, true);
ps.println("Hello Python!");

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

while (buff.ready()) {
    System.out.println(buff.readLine());
}

socket.close();

最佳答案

服务器代码:

import socket

sock = socket.socket(socket.AF_INET,
                      socket.SOCK_STREAM)
sock.bind(("localhost", 5000))
sock.listen()

while True:
    try:
        sock.listen()
        conn, addr = sock.accept()
        print(conn.recv(1024))
        conn.send(b"Hello world from Python")
        conn.close()
    except:
        break

sock.close()

这是正确的,因为 cURL 是这么说的。

➜  ~  curl -v localhost:5000
* Rebuilt URL to: localhost:5000/
*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 5000 (#0)
> GET / HTTP/1.1
> Host: localhost:5000
> User-Agent: curl/7.43.0
> Accept: */*
> 
* Connection #0 to host localhost left intact
Hello world from Python%

哦,你的客户端代码也是错误的。您需要创建一个套接字,而不是数据报套接字(这就是您所拥有的)。

客户端代码:

import java.net.*;
import java.io.*;

class Main
{
    public static void main(String args[]) throws Exception
    {
        // This constructor creates a streaming socket
        Socket socket = new Socket(InetAddress.getByName(null), 5000);
        OutputStream out = socket.getOutputStream();
        PrintStream ps = new PrintStream(out, true);
        ps.println("Hello Python!");

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

        while (buff.ready()) {
            System.out.println(buff.readLine());
        }

        socket.close();
    }
}

关于java - 服务器端的Python套接字问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35237277/

相关文章:

python - 使用 py2exe 创建 exe 和导入 xlrd 的脚本时出现问题

python - 在 Python 中,将文件的 block 读取为十进制数字

Mysql一天死机几次

c++ - GetQueuedCompletionStatus 延迟

java - 如何删除 lambda 表达式的变量?

Java重复将 double 写入txt文件

java - 再次设置 AtomicBoolean

python - 神经网络用一个神经元预测不良

sockets - 如何在 Go 中为 TCP 数据包设置 "don' t 片段”标志位?

java - Treeset 按字母顺序排序