感谢慕课网 《java Socket应用 – 通讯是这样练成的》
目录结构
Server.java
/**
* 基于TCP协议的Socket通讯,实现登录
* 服务端
*/
public class Server {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(8888);
Socket socket = null;
int count = 0;
System.out.println("****************服务器即将启动,等待客户端的连接*************");
while (true) {
socket = serverSocket.accept();
ServerThread serverThread = new ServerThread(socket);
serverThread.start();
count++;
System.out.println("客户端的数量:"+count);
InetAddress address = socket.getInetAddress();
System.out.println("当前客户端的ip"+address);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
ServerThread .java
/**
* 服务器线程处理类
*/
public class ServerThread extends Thread {
Socket socket = null;
public ServerThread(Socket socket) {
this.socket = socket;
}
public void run() {
InputStream is = null;
InputStreamReader isr = null;
BufferedReader br = null;
OutputStream os = null;
PrintWriter pw = null;
try {
is = socket.getInputStream();
isr = new InputStreamReader(is);
br = new BufferedReader(isr);
String info = null;
while ((info = br.readLine()) != null) {
System.out.println("我是服务器。客户端说" + info);
}
socket.shutdownInput();
os = socket.getOutputStream();
pw = new PrintWriter(os);
pw.write("欢迎您!");
pw.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (pw != null)
pw.close();
if (os != null)
os.close();
if (br != null)
br.close();
if (isr != null)
isr.close();
if (isr != null)
is.close();
if (isr != null)
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Client.java
/**
* 基于TCP协议的Socket通讯,实现登录
* 客户端
*/
public class Client {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost", 8888);
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os);
pw.write("用户名:admin2 密码: 123");
pw.flush();
socket.shutdownOutput();
InputStream inputStream = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
String info = null;
while ((info = br.readLine()) != null) {
System.out.println("我是客户端,服务器说" + info);
}
pw.close();
os.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}