我做了一个tcp服务器,它从客户端获取文件名并读取位于服务器上的文件的内容,然后将其传回客户端。收到流后关闭套接字连接 - java
我也做了一个客户端来接收文件。我的问题是在客户端收到文件后,我如何终止循环,所以我可以关闭连接?
这里是服务器代码:
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”是包含网站列表的服务器上的文件。
你不应该使用读者和作家,除非你知道该文件是文本。使用InputStreams和OutputStreams:它们适用于所有文件。 – EJP 2013-02-27 12:29:27