クライアントからサーバーにファイルを送信しようとしています。サーバーはファイルを受信し、クライアントに確認メッセージを送信します。ファイルを送信してからソケットを通してメッセージ
私の問題は、クライアントが確認を待っているときに応答しなくなることです。
サーバー:
import java.net.*;
import java.io.*;
public class Server {
public static void main(String args[]) throws IOException {
int port = 1234;
ServerSocket server_socket;
server_socket = new ServerSocket(port);
System.out.println("Server waiting for client on port "
+ server_socket.getLocalPort());
// server infinite loop
while (true) {
Socket socket = server_socket.accept();
System.out.println("New connection accepted "
+ socket.getInetAddress() + ":" + socket.getPort());
try {
byte[] b = new byte[1024];
int len = 0;
int bytcount = 1024;
String FileName = "C:\\test\\java\\tmp\\sentfile.pdf";
FileOutputStream inFile = new FileOutputStream(FileName);
InputStream is = socket.getInputStream();
BufferedInputStream in2 = new BufferedInputStream(is, 1024);
while ((len = in2.read(b, 0, 1024)) != -1) {
bytcount = bytcount + 1024;
inFile.write(b, 0, len);
}
System.out.println("Bytes Writen : " + bytcount);
//Sending the response back to the client.
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
oos.flush();
oos.writeObject("ok");
System.out.println("Message sent to the client is "+"ok");
in2.close();
inFile.close();
} catch (IOException e) {
System.out.println("Unable to open file" + e);
return;
}
socket.close();
System.out.println("Connection closed by client");
}
}
}
クライアント:
import java.net.*;
import java.io.*;
public class Client {
public static void main(String[] args) throws UnknownHostException,
IOException, ClassNotFoundException {
int port = 1234;
Socket socket = null;
// connect to server
socket = new Socket("127.0.0.1", port);
try {
byte[] buf = new byte[1024];
OutputStream os = socket.getOutputStream();
BufferedOutputStream out = new BufferedOutputStream(os, 1024);
String file = "C:\\test\\java\\client\\source.pdf";
FileInputStream in = new FileInputStream(file);
int i = 0;
int bytecount = 1024;
while ((i = in.read(buf, 0, 1024)) != -1) {
bytecount = bytecount + 1024;
out.write(buf, 0, i);
out.flush();
}
System.out.println("Bytes Sent :" + bytecount);
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
String confirmation = (String) ois.readObject();
System.out.println("from server : " + confirmation);
out.close();
in.close();
} catch (IOException e) {
System.out.println(e);
}
socket.close();
}
}
出力ストリームをサーバー側からフラッシュしないでください。メッセージが表示されます: 'クライアントに送信されたメッセージはOKですか? ' – Lynch
uresponsiveの部分にコメントする予定です。クライアントが応答(読み込み応答)を待っている場合、私はそれが応答しないと思います。リクエストを別のスレッドで行うことを検討しましたか?クライアント側の – Andreas
では、 "Bytes Sent:.."の後にブロックされます。 最初の部分にコメントすると機能しています。 2番目の部分にコメントすると機能しています。 両方が動作していません。 – ophelie88