Java 为什么服务器套接字不继续?
我的大学工作应用程序 文件至PDF == 我的服务器: 每个申请一个线程Java 为什么服务器套接字不继续?,java,sockets,stream,Java,Sockets,Stream,我的大学工作应用程序 文件至PDF == 我的服务器: 每个申请一个线程 server = new ServerSocket(5000); while (true) { Socket cliente = server.accept(); Thread thread = new Thread(new Requisitor(cliente)); thread.start(); }
server = new ServerSocket(5000);
while (true) {
Socket cliente = server.accept();
Thread thread = new Thread(new Requisitor(cliente));
thread.start();
}
我的类请求器(运行方法)
但是没有调用receive()方法。。仅当我断开客户端套接字时
我的客户端套接字:
Client cliente = new Client();
cliente.connect();
cliente.send(); // send doc binary
boolean flag = true;
while (flag) {
if(!cliente.streamIsEmpty()){ // wait for conversion
cliente.receive(); // receive pdf
flag = false;
}
}
cliente.disconect()
我的接收方法
InputStream in = cliente.getInputStream();
BufferedInputStream stream = new BufferedInputStream(in);
FileOutputStream out = new FileOutputStream("docs/"+cliente.getInetAddress().getHostAddress()+".doc");
byte[] buffer = new byte[1024];
int length = 0;
while((length = stream.read(buffer, 0, 1024)) != -1) {
out.write(buffer, 0, length);
}
out.flush();
stream.close();
有什么想法吗(在这里,直到读取流返回-1为止。套接字关闭时会发生这种情况。尝试在cliente.send()中关闭OutputStream(而不是整个套接字),然后在它写入文档
while((length = stream.read(buffer, 0, 1024)) != -1) {
out.write(buffer, 0, length);
}
您的问题不清楚。看起来您有两个名为receive的方法(一个在客户端,一个在服务器中)。您说“没有调用receive()方法”,但您没有说哪个方法没有被调用 但有一点绝对是错误的:
boolean flag = true;
while (flag) {
if (!cliente.streamIsEmpty()) { // wait for conversion
cliente.receive(); // receive pdf
flag = false;
}
您的代码正忙着等待,这很糟糕。此外,哪里不需要这样等待。只需调用
cliente.receive()
…将被阻止,直到有东西到达…或服务器断开连接。+1-如果他的客户端代码没有关闭其输出流,这肯定可以解释问题。此外,我注意到,在等待响应时,您..cliente.streamIsEmpty(){//等待转换cliente.receive()-这应该是不必要的。调用stream.read(buffer)将阻塞,直到服务器开始发送数据。关闭输出流也会关闭套接字。没有关闭输出流…(不是整个套接字)之类的事情。没有答案。
boolean flag = true;
while (flag) {
if (!cliente.streamIsEmpty()) { // wait for conversion
cliente.receive(); // receive pdf
flag = false;
}