需求描述:在客户端获取远程服务器某文件的内容
客户端程序如下:
package com.socket.clientsocket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class Sclient {
/**
* @param args
*/
protected BufferedReader socketReader;
protected PrintWriter socketWriter;
protected String hostIp;
protected int hostPort;
public Sclient(String ahostIp,int ahostPort){
this.hostIp = ahostIp;
this.hostPort = ahostPort;
}
public void setUpConnection(){
try {
//1.创建Socket,建立连接
Socket socket = new Socket(hostIp,hostPort);
//2.获取输入流和输出流,并进行封装
socketReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
socketWriter = new PrintWriter(socket.getOutputStream());
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void tearDownConnection(){
try {
socketReader.close();
socketWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//根据需求,对流进行处理
public String getFile(String fileNameToGet){
StringBuffer sb = new StringBuffer();
socketWriter.println(fileNameToGet);
socketWriter.flush();
String line = null;
try {
while((line = socketReader.readLine()) != null){
sb = sb.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}
public static void main(String[] args) {
//创建客户端
Sclient client = new Sclient("198.27.0.166",8200);
//建立连接
client.setUpConnection();
//需求操作
String content = client.getFile("c:\\log.txt");
//关闭连接
client.tearDownConnection();
}
}
服务器端的程序如下:
package com.socket.serversocket;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Sserver {
public static void main(String[] args){
//创建服务器端
Sserver s = new Sserver(3000);
//监听连接
s.acceptConnections();
}
int listenPort;
public Sserver(int alistenPort){
this.listenPort = alistenPort;
}
public void acceptConnections(){
try {
ServerSocket server = new ServerSocket(listenPort);
Socket incomingConnection = null;
while (true) {
incomingConnection = server.accept();
handleConnection(incomingConnection);
}
} catch (IOException e) {
e.printStackTrace();
}
}
public void handleConnection(Socket incomingConnection){
try {
//获取输入流跟输出流,并进行封装
InputStream inputFromSocket = incomingConnection.getInputStream();
OutputStream outputToSocket = incomingConnection.getOutputStream();
BufferedReader streamReader = new BufferedReader(new InputStreamReader(inputFromSocket));
//接收客户端讯息
FileReader fileReader = new FileReader(new File(streamReader.readLine()));
BufferedReader bufferedFileReader = new BufferedReader(fileReader);
PrintWriter streamWriter = new PrintWriter(outputToSocket);
String line = null;
//将文件中的内容写入客户端
while((line = bufferedFileReader.readLine()) != null){
streamWriter.println(line);
}
streamReader.close();
fileReader.close();
streamWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}