一、案例:实现多客户端连接服务器
1.1 客户端代码
public class Client {
public static void main(String[] args) throws Exception {
Socket client = new Socket("localhost",8888);
// 用户输入
Scanner keyScan = new Scanner(System.in);
// 接收服务器的信息
Scanner netScan = new Scanner(client.getInputStream());
netScan.useDelimiter("\n");
PrintStream netOut = new PrintStream(client.getOutputStream());
boolean flag = true;
while(flag) {
System.out.println("请输入要发送的信息:");
String str= null;
if(keyScan.hasNext()) {
str = keyScan.next().trim();
// 发送到服务器
netOut.println(str);
// 服务器端有回应
if(netScan.hasNext()) {
System.out.println(netScan.next());
}
}
if("byebye".equals(str)) {
flag = false;
break;
}
}
keyScan.close();
netScan.close();
client.close();
}
}
1.2 单线程服务器端代码【仅支持一个客户端】
public class SingleThreadServer {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(8888);
// 等待连接
Socket client = server.accept();
// 接受客户端的输入
Scanner scan = new Scanner(client.getInputStream());
scan.useDelimiter("\n");
// 对客户端的回应
PrintStream out = new PrintStream(client.getOutputStream());
boolean flag = true;
while(flag) {
// pandaUN客户达UN是否是有数据
if(scan.hasNext()) {
// 防止有空格出现
String str = scan.next().trim();
if("byebye".equals(str)) {
out.println("byebye!!!");
// 退出循环
flag = false;
break;
}
// 做出回应
out.println("Server:"+str);
}
}
out.close();
scan.close();
server.close();
}
}
1.3 多线程服务器端代码【支持多客户端】
public class MultiThreadServer {
public static class MyThread implements Runnable{
private Socket client;
public MyThread(Socket client) {
this.client = client;
}
@Override
public void run() {
try {
// 接受客户端的输入
Scanner scan = new Scanner(client.getInputStream());
scan.useDelimiter("\n");
// 对客户端的回应
PrintStream out = new PrintStream(client.getOutputStream());
boolean flag = true;
while(flag) {
// pandaUN客户达UN是否是有数据
if(scan.hasNext()) {
// 防止有空格出现
String str = scan.next().trim();
if("byebye".equals(str)) {
out.println("byebye!!!");
// 退出循环
flag = false;
break;
}
// 做出回应
out.println("Server:"+str);
}
}
out.close();
scan.close();
}catch(Exception e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(8888);
// 无限的接受客户端的请求
boolean flag = true;
while(flag) {
// 等待连接
Socket client = server.accept();
// 开启线程 多线程服务器
new Thread(new MyThread(client)).start();
}
server.close();
}
}
评论