📄 client.java
字号:
/**
* @author wenhuaxiao
* @see <code>Server.java</code>
* @version 1.0
*
*
*/
import java.net.*;
import java.io.*;
public class Client {
// The port number in static final type .
private static final int socketPort = 6789;
// Default constructor.
public Client() {}
public void sendMessage(Socket clientSocket, String message) {
String clientRequest;
System.out.println(message + " is listening to your request:\n");
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(System.in));
// In "Try-Catch" block, we do the actual work to send the message out,
// and when the IO erro countered, throw out "IOException".
try {
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
clientRequest = inFromClient.readLine();
outToServer.writeBytes(clientRequest + "\r\n\r\n");
} catch (IOException ioe) {
System.err.println("IOException: ");
ioe.printStackTrace();
}
}
public void header(InputStream inFromServer) {
String header = "";
int temp;
boolean isHeader = false;
try {
temp = inFromServer.read();
System.out.println(temp);
header += (char) temp;
// When the string is "\r\n\r\n", the header is over, and we get it.
while (temp != -1 && !isHeader) {
switch (temp) {
case 13:
temp = inFromServer.read();
switch (temp) {
case 10:
header += (char) temp;
if ((char) (temp = inFromServer.read()) == ('\r'))
if ((char) (temp = inFromServer.read()) == ('\n'))
isHeader = true;
break;
default:
break;
}
break;
default:
break;
}
if (isHeader)
break;
temp = inFromServer.read();
header += (char) temp;
}
} catch (IOException ioe) {
System.err.println("IOException: ");
ioe.printStackTrace();
}
System.out.println("header:\n" + header + "\n");
}
public byte[] serverReply(InputStream inFromServer, Socket clientSocket) {
int fileLength=0;
byte[] buffer = null;
// Get the length of the flow that come from the server and it may cause the IOException.
try {
fileLength = inFromServer.available();
} catch (IOException e) {
System.err.println("IO erro when \"inFromServer.available()\" ");
e.printStackTrace();
}
buffer = new byte[fileLength];
DataInputStream receivedFile = null;
receivedFile = new DataInputStream(inFromServer);
// Get every byte from the DataInputStream object to the buffer array.
try {
for (int i=0;i<buffer.length;i++){
buffer[i] = receivedFile.readByte();
}
} catch (EOFException eof) {
eof.printStackTrace();
}catch (IOException e2) {
e2.printStackTrace();
}
return buffer;
}
public void saveFile(BufferedReader inFromClient, byte[] buffer) {
System.out.println("Input a file name to save the header:\n");
// Write the infomation to the file whose name is inputed by the user.
try {
FileOutputStream fileout = new FileOutputStream(inFromClient.readLine());
PrintStream ps = new PrintStream(fileout);
ps.write(buffer);
ps.close();
} catch (FileNotFoundException fnfe) {
System.err.println("The specified file is not exist!");
fnfe.printStackTrace();
} catch (IOException ioe) {
System.err.println("IO erro: ");
ioe.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
// Creat a new Client object.
Client client = new Client();
Socket clientSocket = null;
// Establish a socket connection.
try {
clientSocket = new Socket("host", socketPort);
} catch (UnknownHostException unke) {
System.err.println("The host is unknown!");
unke.printStackTrace();
} catch (IOException ioe) {
System.err.println("IO erro: ");
ioe.printStackTrace();
}
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(
System.in));
InputStream inFromServer = new BufferedInputStream(clientSocket.getInputStream());
client.sendMessage(clientSocket, args[0]); //Send message.
client.header(inFromServer); //Get header.
byte[] buffer = client.serverReply(inFromServer, clientSocket); //Change the stream flow to the type of "byte"
client.saveFile(inFromClient, buffer); //Save file
clientSocket.close(); //Close the connection.
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -