完成基于TCP协议的网络编程案例
要求:使用缓冲流提升效率、使用线程支持多个客户端同时连接并发消息
//服务端
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerTest {
public static void main(String[] args) {
ServerSocket serverSocket = null;
Socket socket = null;
try {
serverSocket = new ServerSocket(8888);
while (true){
System.out.println("等待客户端连接...");
socket = serverSocket.accept();
System.out.println("客户端" + socket.getInetAddress() + "连接成功");
SeverThread thread = new SeverThread(socket);
Thread t = new Thread(thread);
t.start();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (serverSocket != null) {
try {
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
//处理客户端端消息的类
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Date;
public class SeverThread implements Runnable {
private Socket socket;
public SeverThread(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
BufferedReader br = null;
PrintStream ps = null;
Date date = null;
try {
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
ps = new PrintStream(socket.getOutputStream());
while (true) {
date = new Date();
String clientMsg = null;
clientMsg = br.readLine();
if (null != clientMsg) {
System.out.println(socket.getInetAddress() + "客户端说:" + clientMsg);
ps.println("啊对对对,当前时间是" + date);//回复消息还有时间
}
}
} catch (IOException e) {
System.out.println(socket.getInetAddress() + "客户端下线!");
} finally {
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (ps != null) {
ps.close();
}
}
}
}
//客户端
import java.io.*;
import java.net.Socket;
import java.util.Scanner;
public class ClientTest {
public static void main(String[] args) {
Socket socket = null;
Scanner sc = null;
PrintStream ps = null;
BufferedReader br = null;
try {
sc = new Scanner(System.in);
System.out.println("等待连接服务器...");
socket = new Socket("127.0.0.1", 8888);//你自己的ip
System.out.println("连接服务器成功...");
ps = new PrintStream(socket.getOutputStream());
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while (true) {
System.out.println("请输入想发送的消息");
String msg = sc.next();
ps.println(msg);
String serverMsg = br.readLine();
System.out.println("服务器发来的消息:" + serverMsg);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (ps != null) {
ps.close();
}
if (sc != null) {
sc.close();
}
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}