练习一(黑马程序员面试题):客户端向服务器写字符串(键盘录入),服务器(多线程)将字符串反转后写回,客户端再次读取到的是反转后的字符串
相关代码如下:
package com.wsq.test;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class Test1_Client {
/**
* 客户端向服务器写字符串(键盘录入),服务器(多线程)将字符串反转后写回,客户端再次读取到的是反转后的字符串
* @throws IOException
* @throws UnknownHostException
*
*
* */
public static void main(String[] args) throws UnknownHostException, IOException {
Scanner sc = new Scanner(System.in);
Socket wsq = new Socket("192.168.1.182",1014);
BufferedReader br = new BufferedReader(new InputStreamReader(wsq.getInputStream()));
PrintStream ps = new PrintStream(wsq.getOutputStream());
ps.println(sc.nextLine());
System.out.println(br.readLine());
wsq.close();
}
}
package com.wsq.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Test2_Server {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(1014);
System.out.println("服务器已启动,已绑定1014端口");
while(true){
final Socket wsq = server.accept();
new Thread(){
public void run(){
try {
BufferedReader br = new BufferedReader(new InputStreamReader(wsq.getInputStream()));
PrintStream ps = new PrintStream(wsq.getOutputStream());
String line = br.readLine();
line = new StringBuilder(line).reverse().toString();
ps.println(line);
wsq.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
}
}
练习二(黑马程序员面试题):客户端向服务器上传文件
相关步骤如下:
* 1,提示输入要上传的文件路径,验证路径是否存在以及是否是文件夹
* 2,发送文件名到服务器
* 3,建立多线程的服务器
* 4,读取文件名
* 5,判断文件是否存在,将结果发回客户端
* 6,接收结果,如果存在给予提示,程序直接退出
* 7,如果不存在,定义FileInputStream读取文件,写出到网络
* 8,定义FileOutputStream,从网络读取数据,存储到本地
相关代码如下:
package com.wsq.test;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class Test1_UpdateClient {
/**
*
* 客户端向服务器上传文件
*
*
* 1,提示输入要上传的文件路径,验证路径是否存在以及是否是文件夹
* 2,发送文件名到服务器
* 6,接收结果,如果存在给予提示,程序直接退出
* 7,如果不存在,定义FileInputStream读取文件,写出到网络
* @throws IOException
* @throws UnknownHostException
*
*
* */
public static void main(String[] args) throws UnknownHostException, IOException {
File file = getFile();
Socket socket = new Socket("192.168.1.182",1014);
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintStream ps = new PrintStream(socket.getOutputStream());
ps.println(file.getName());
String result = br.readLine();
if("存在".equals(result)){
System.out.println("您上传的文件已经存在,请不要重复上传");
socket.close();
return;
}
FileInputStream fis = new FileInputStream(file);
byte [] arr = new byte[8192];
int len;
while((len = fis.read(arr)) != -1){
ps.write(arr,0,len);
}
fis.close();
socket.close();
}
private static File getFile() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个文件路径");
while(true){
String line =sc.nextLine();
File file = new File(line);
if(! file.exists()){
System.out.println("您录入的文件录入不存在,请重新录入:");
}else if(file.isDirectory()){
System.out.println("您录入的是文件夹路径,请录入一个文件路径:");
}else{
return file;
}
}
}
}
package com.wsq.test;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Test2_UpdateServer {
/**
*
* 3,建立多线程的服务器
* 4,读取文件名
* 5,判断文件是否存在,将结果发回客户端
* 6,定义FileOutputStream,从网络读取数据,存储到本地
* @throws IOException
*
*
*
* */
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(1014);
System.out.println("服务器已启动,已绑定1014端口号");
while(true){
final Socket socket = server.accept();
new Thread(){
public void run(){
try {
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
PrintStream ps = new PrintStream(socket.getOutputStream());
String fileName = br.readLine();
File dir = new File("update");
dir.mkdir();
File file = new File(dir,fileName);
if(file.exists()){
ps.println("存在");
socket.close();
return;
}else {
ps.println("不存在");
}
FileOutputStream fos = new FileOutputStream(file);
byte [] arr = new byte [8192];
int len;
while((len = is.read(arr)) != -1){
fos.write(arr, 0, len);
}
fos.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
}
}