gpt4 book ai didi

java - 使用套接字时,json 文件未完整到达

转载 作者:行者123 更新时间:2023-11-30 06:10:32 25 4
gpt4 key购买 nike

我有一个视频流。每一帧我都需要发送一个包含该帧数据的小 json 文件,速度至关重要。最好的方法是什么?

我的服务器是这样的。等待 json 文件,然后必须将该 json 文件发送到 python 应用程序。

public class ServerClass  {

public static void main(String[] args) {
Marcoserver mimarco=new Marcoserver();
}
}

class Marcoserver implements Runnable {

public Marcoserver(){
Thread miHilo = new Thread(this);
miHilo.start();
}

public void run() {
try {
ServerSocket server = new ServerSocket(7777);

while (true) {
Socket miSocket = server.accept();

BufferedReader entrada = new BufferedReader(new InputStreamReader(miSocket.getInputStream(), "UTF8"));
String mensaje = entrada.readLine();

JSONObject obj;
obj = new JSONObject(mensaje);
System.out.println(obj);

ConectorSocket cntor = new ConectorSocket("localhost", 6363);
cntor.Conectar();
cntor.Send(mensaje);
cntor.Close();

miSocket.close();
}

} catch (IOException e) {
e.printStackTrace();
}
}

}


public class ConectorSocket{

private String host;
private int port;
Socket sockSend;

public ConnectClass(String hst, int prt ) {
this.host = hst;
this.port = prt;
}

public void Conectar() {
this.sockSend = new Socket(this.host, this.port);
}
public void Send(String mensaje) {
DataOutputStream flujo_salida = new DataOutputStream(sockSend.getOutputStream());
flujo_salida.writeBytes(mensaje);
flujo_salida.close();
}
public boolean Close() {
this.sockSend.close();
}

}

这是简化的 python 应用程序:

serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.bind(('localhost', 6666))
serversocket.listen()

while True:
connection, address = serversocket.accept()
buf = connection.recv(2048)
if len(buf) > 0:
print(buf.decode())

我的问题是 python 应用程序打印不完整的信息,例如:

{"keyword"
{"keyword": [[14, 1, -1]]}
{"keyword": [[14,

而不是:

{"keyword":[]}
{"keyword":[[14,1,-1]]}
{"keyword":[[14,2,-1]]}

最佳答案

您的 Java 代码没有任何问题,但您的 Python 代码不好:

while True:
connection, address = serversocket.accept()
buf = connection.recv(2048)
if len(buf) > 0:
print(buf.decode())

这将只打印每个连接第一个收到的 TCP 数据包。

您需要继续调用recv直到它返回0:

while True:
connection, address = serversocket.accept()
msg = []
while True:
buf = connection.recv(65536)
if (len(buf) == 0):
break
msg.append(buf)
print(''.join(msg))
connection.close()

您还需要关闭每个连接。

关于java - 使用套接字时,json 文件未完整到达,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50331018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com