我的大学工作应用程序..
DOC to PDF
==
我的服务器:
每个请购单一个帖子
server = new ServerSocket(5000);
while (true) {
Socket cliente = server.accept();
Thread thread = new Thread(new Requisitor(cliente));
thread.start();
}
我的班级Requisitor(跑步法)
@Override
public void run() {
// receive doc binary
receive();
// doc to pdf
Conversor converson = new Conversor(new File("docs/"+cliente.getInetAddress().getHostAddress()+".doc"),new File("pdfs/"+cliente.getInetAddress().getHostAddress()+".pdf"));
converson.converter();
//response pdf binary to client
response();
}
但是方法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();
任何想法? :(
答案 0 :(得分:1)
你的问题不清楚。看起来你有两个叫做receive的方法(一个在客户端,一个在服务器中)。你说"没有调用方法receive()"但你不能说一个人没有被召唤。
但有一点肯定是错的:
boolean flag = true;
while (flag) {
if (!cliente.streamIsEmpty()) { // wait for conversion
cliente.receive(); // receive pdf
flag = false;
}
您的代码正忙着等待,这很糟糕。此外,无需像那样等待。只需调用cliente.receive()
...将阻塞,直到某些内容到达......或服务器断开连接。
答案 1 :(得分:0)
这里读取直到读取流返回-1。当套接字关闭时会发生这种情况。尝试在写入文档后关闭cliente.send()(而不是整个套接字)中的OutputStream。
while((length = stream.read(buffer, 0, 1024)) != -1) {
out.write(buffer, 0, length);
}