服务器端
package day325;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
//指定服务端的端口号
public static final int SERVE_PORT=8080;
public static void main(String[] args) throws Exception {
//1.创建一个socket服务端对象
ServerSocket serversocket=new ServerSocket(SERVE_PORT);
//2.监听来自客户端的请求
Socket socket=serversocket.accept();
//3.获取输入流,将数据读取出来,得到字节流
InputStream is=socket.getInputStream();
//4.将字节流转为字符流
InputStreamReader isr=new InputStreamReader(is);
//5.将字符流转换为缓冲流
BufferedReader br=new BufferedReader(isr);
//6.从缓冲流中读取来自客户端的信息
String str=br.readLine();
System.out.println("来自客户端的信息:"+str);
//禁用socket中的输入流
socket.shutdownInput();
//回复:你好你好
String response="你好你好";
OutputStream os= socket.getOutputStream();
//字节输出流转为转换为字符输出流
OutputStreamWriter osw=new OutputStreamWriter(os);
//字符输出流转换为字符缓冲流
BufferedWriter bw=new BufferedWriter(osw);
bw.write(response);
bw.flush();
//7.关闭对象
br.close();
bw.close();
socket.close();
serversocket.close();
}
}
客户端
package day325;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
public class Client {
//指定服务端IP
public static final String SERVER_LOCALHOST="127.0.0.1";
//指定服务端的端口号
public static final int SERVE_PORT=8080;
public static void main(String[] args) throws Exception{
//1.创建客户端的socket对象,并且指定服务器的IP和端口号
Socket socket=new Socket(SERVER_LOCALHOST,SERVE_PORT);
//2.获取socket的输出流
OutputStream os=socket.getOutputStream();
//3.准备一段需要传输的信息
String say="hello";
//字节输出流转为转换为字符输出流
OutputStreamWriter osw=new OutputStreamWriter(os);
//字符输出流转换为字符缓冲流
BufferedWriter bw=new BufferedWriter(osw);
//4.将准备的话语写入流中。
bw.write(say);
//刷新
bw.flush();
//禁用socket中的输出流
socket.shutdownOutput();
//3.获取输入流,将数据读取出来,得到字节流
InputStream is=socket.getInputStream();
//4.将字节流转为字符流
InputStreamReader isr=new InputStreamReader(is);
//5.将字符流转换为缓冲流
BufferedReader br=new BufferedReader(isr);
//6.从缓冲流中读取来自客户端的信息
String str=br.readLine();
System.out.println("来自服务端的信息:"+str);
//关闭
bw.close();
//关闭socket对象
socket.close();
}
}
运行的顺序:先启动服务器,在启动客户端
服务器端:
客户端(通过箭头切换控制台):
【注】:本文是将字节流包装为字符流,再包装为字符缓冲流,也可以不包装,直接以字节流传输