クライアントからファイル名を取得し、サーバー上にあるファイルの内容を読み取り、それをクライアントにストリーミングする tcp サーバーを作成しました。
ファイルを受信するクライアントも作成しました。私の問題は、クライアントでファイルを受信した後です。ループを終了して接続を閉じるにはどうすればよいですか?
サーバーコードは次のとおりです。
import java.io.*;
import java.net.*;
import java.util.*;
public class WebTCPServer_file {
public static void main(String argv[]) throws Exception{
String request;
ServerSocket welcomeSocket = new ServerSocket(6790); //opening socket
while(true){
Socket connectionSocket = welcomeSocket.accept();
Scanner inFromClient = new Scanner(connectionSocket.getInputStream());
DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
request = inFromClient.nextLine(); //client request
System.out.println("Received: "+request);
/*dividing request command*/
String reqMeth = request.substring(0, 3);
String reqURL = request.substring(5, (request.lastIndexOf("HTTP/1.1")));
String reqProto = request.substring(request.indexOf("HTTP/1.1"));
System.out.println("Request Method:\t" +reqMeth +"\nRequest URL:\t" +reqURL+ "\nRequest Protocol: " +reqProto);
File localFile = new File(reqURL.trim());
FileReader in = new FileReader(localFile);
BufferedReader inBuff = new BufferedReader(in);
String c;
while((c = inBuff.readLine())!=null){
outToClient.writeBytes(c + '\n');
System.out.println(c);
} //END while
outToClient.flush();
in.close();
} //END while(true)
} //END main
} //END class
クライアントコードは次のとおりです。
import java.io.*;
import java.net.*;
import java.util.*;
public class TCPClient_file {
public static void main(String[] args) throws Exception{
String sentence ;
Scanner inFromUser = new Scanner(System.in);
Socket clientSocket = new Socket("192.168.0.16", 6790);
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
BufferedReader inFromServer = new BufferedReader(
new InputStreamReader(
clientSocket.getInputStream()));
sentence = inFromUser.nextLine();
outToServer.writeBytes(sentence + '\n');
String serverfile;
while ((serverfile = inFromServer.readLine()) != null)
System.out.println(serverfile);
inFromServer.close();
outToServer.close();
clientSocket.close();
} //END main
} //END class
サーバーからのクライアント要求:
GET /domains.txt HTTP/1.1
「domains.txt」は、Web サイトのリストを含むサーバー上のファイルです。