客户端实现:
package com.xiangyang.cn.distributed.note.tipbio;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class SocketClient {
// 搭建客户端
public static void main(String[] args) throws IOException {
try {
// 1、创建客户端Socket,指定服务器地址和端口
Socket socket = new Socket("127.0.0.1", 8088);
System.out.println("我是客户端,启动成功。");
// 2、获取缓冲字符输入流BufferedReader,将文件(D:\\client.txt,文件格式也是UTF-8编码)内容读到字符缓冲区
InputStream is = new FileInputStream(new File("D:\\client.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(is,"UTF-8"));
// 由Socket对象得到输出流,并构造PrintWriter对象,PrintWriter获取字符缓冲区中的信息,将信息发送到服务端
PrintWriter write = new PrintWriter(socket.getOutputStream());
// 3、获取缓冲字符输入流,并读取服务器端的响应信息 (由Socket对象得到输入流,并构造相应的BufferedReader对象)
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));
// 流操作
String readline = null;
boolean flag = false;
while ((readline = br.readLine())!=null) {
// 若从标准输入中读取输入的字符串
write.println(readline);
// 将从系统标准输入的字符串输出到Server
write.flush();
// 判断是否发送请求
flag = true;
}
// 打印响应信息
String line = null;
while (flag && (line = in.readLine())!=null) {
System.out.println("服务端响应信息:" + line);
}
// 4、关闭资源
write.close(); // 关闭Socket输出流
in.close(); // 关闭Socket输入流
socket.close(); // 关闭Socket
} catch (Exception e) {
System.out.println("can not listen to:" + e);// 出错,打印出错信息
}
}
}
服务端实现:
package com.xiangyang.cn.distributed.note.tipbio;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketService {
//搭建服务器端
public static void main(String[] args) throws IOException{
SocketService socketService = new SocketService();
//1)创建一个服务器端Socket,即SocketService
socketService.oneServer();
}
public void oneServer(){
try{
ServerSocket server = new ServerSocket(8088);
System.out.println("服务器启动成功。");
//2、调用accept()方法开始监听,等待客户端的连接 .使用accept()阻塞等待客户请求,有客户请求到来则产生一个Socket对象,并继续执行
Socket socket = server.accept();
//3、获取输入流,并读取客户端信息
BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//4. 获取输出流,向客户端返回响应信息
PrintWriter writer=new PrintWriter(socket.getOutputStream());
// 响应信息为D:\\service.txt 文件内容,文件格式为UTF-8编码
InputStream is = new FileInputStream(new File("D:\\service.txt"));
BufferedReader br=new BufferedReader(new InputStreamReader(is,"UTF-8"));
String readline = null;
while ((readline = br.readLine()) != null) {
//响应信息
writer.println(readline);
//向客户端输出该字符串
writer.flush();
}
//打印客户端请求信息
String line = null;
while ((line = in.readLine()) != null) {
System.out.println("客户端请求信息:"+line);
}
//5、关闭资源
writer.close(); //关闭Socket输出流
in.close(); //关闭Socket输入流
socket.close(); //关闭Socket
server.close(); //关闭ServerSocket
}catch(Exception e) {
System.out.println("err."+e);
}
}
}