写一个简单的客户端与服务器之间的请求与响应,现实中大部分是多个客户端不断向服务器发送请求,服务器再进行响应。
package com.atguigu.practices.socket;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
try {
// 1.创建一个服务器
ServerSocket serverSocket = new ServerSocket(5000);
// 2.服务器接收客户端发来的请求
Socket socket = serverSocket.accept();
// 3.服务器读取客户端发来的请求
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String sendInfo = "";
while ((sendInfo = br.readLine()) != null){
System.out.println("客户端请求:"+sendInfo);
}
// 4.读取后客户端要给出响应到客户端
OutputStream os = socket.getOutputStream();
String info = "欢迎登录!";
os.write(info.getBytes());
os.close();
br.close();
is.close();
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
package com.atguigu.practices.socket;
import java.io.*;
import java.net.Socket;
public class Client {
public static void main(String[] args) {
try {
// 1.创建客户端Socket对象
Socket socket = new Socket("localhost", 5000);
// 2.向服务器发送请求
OutputStream os = socket.getOutputStream();
String send = "用户名:admin;密码:123456";
os.write(send.getBytes());
// 3.客户端关闭输出,不再发送请求
socket.shutdownOutput();// 禁用此套接字的输出流。
// 4.客户端接收服务器的消息
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String info = "";
while ((info= br.readLine())!=null){
System.out.println("服务器响应:"+info);
}
br.close();
is.close();
os.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
服务器输出:
客户端输出:
将服务器代码优化一下:让服务器一直开启
客户端发送两次请求,服务器端:
客户端: