class SocketRunnable implements Runnable {
private Socket socket;
public SocketRunnable(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
//1.获取输入流,转成缓冲流
InputStream in = socket.getInputStream();
InputStreamReader reader = new InputStreamReader(in);
BufferedReader buffer = new BufferedReader(reader);
//2.循环读取数据打印,直到读取break则退出
while (true){
String str = buffer.readLine();
if ("break".equals(str))break;
InetAddress address = socket.getInetAddress();
String hostAddress = address.getHostAddress();
System.out.println("客户端[" + hostAddress + "]:" + str);
}
//3.关闭资源
reader.close();
socket.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
public class SimpleChatServer {
public static void main(String[] args) {
try {
//1.创建ServerSocket
ServerSocket socket = new ServerSocket();
//2.绑定端口
InetSocketAddress socketAddress = new InetSocketAddress(9999);
socket.bind(socketAddress);
while (true){
//3.接收客户端连接
Socket accept = socket.accept();
System.out.println("客户端已连接!");
//4.创建线程,将accept传给线程
SocketRunnable runnable = new SocketRunnable(accept);
Thread thread = new Thread(runnable);
thread.start();
}
}catch (Exception e){
e.printStackTrace();
}
}
}
public class SimpleChatClient {
public static void main(String[] args) {
try {
//1.创建Socket对象
Socket socket = new Socket();
//2.连接服务器
socket.connect(new InetSocketAddress("ip",9999));
System.out.println("连接服务器成功!");
//3.获取输出流,转化打印流
OutputStream out = socket.getOutputStream();
PrintWriter writer = new PrintWriter(out);
//4.从控制台读取输入,发送给服务器
Scanner sc = new Scanner(System.in);
while (true){
String str = sc.nextLine();
writer.println(str);
writer.flush();
if ("break".equals(str))break;
}
//5.关闭资源
writer.close();
sc.close();
socket.close();
}catch (Exception e){
e.printStackTrace();
}
}
}