最近有在笔试和面试,做到这么一道题,简单把自己的想法写下了并实现,有不合适或者错误的地方请大家多多指正。
题目描述
现分别有一个通过socket发送文件的客户端以及一个通过socket接收文件的服务端:
a) 客户端从/tmp/src.data文件中读取文件内容,通过网络socket将文件内容发给服务端
b) 服务端监听10000端口,当10000端口接收到客户端连接请求时,从连接读取文件内容,并写入/tmp/dst.data中
试写出客户端和服务端的具体实现代码
a) 客户端从/tmp/src.data文件中读取文件内容,通过网络socket将文件内容发给服务端
b) 服务端监听10000端口,当10000端口接收到客户端连接请求时,从连接读取文件内容,并写入/tmp/dst.data中
试写出客户端和服务端的具体实现代码
服务端:
package test;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws IOException{
ServerSocket server = new ServerSocket(12700);
get();
while(true){
Socket socket = server.accept();
PrintStream ps = new PrintStream(socket.getOutputStream());
// 读取字节数据
ps.print(get());
ps.close();
socket.close();
}
}
public static String get() throws IOException {
FileInputStream fis = new FileInputStream(System.getProperty("user.dir") + "/src/test/tmp/src.data");
byte[] bbuf = new byte[1024];
int hasReaded = 0;
StringBuffer buffer = new StringBuffer();
while( (hasReaded = fis.read(bbuf)) > 0){
buffer.append(new String(bbuf, 0 , hasReaded));
}
return buffer.toString();
}
}
客户端:
package test;
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;
public class MySocket {
public static void main(String[] args) throws UnknownHostException, IOException{
Socket socket = new Socket("127.0.0.1", 12700);
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
writeTo(br.readLine());
socket.close();
}
public static void writeTo(String str) throws IOException{
FileOutputStream fileOutputStream = new FileOutputStream("dst.data");
for(int i = 0;i < str.length();i++){
System.out.println(str.charAt(i));
fileOutputStream.write((byte)str.charAt(i));
}
fileOutputStream.close();
}
}