实现服务器和多个客户端之间的同时通信过程(线程)
程序员文章站
2022-06-06 09:34:24
...
服务器端
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class Server {
private static BufferedReader br=null;
private static PrintWriter pw=null;
private static ServerSocket ss;
private static Socket s;
static Scanner scanner=new Scanner(System.in);
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
ss=new ServerSocket(8888);
System.out.println("服务器正常启动。。。。");
while(true)
{
s=ss.accept();//阻塞方法
System.out.println("连接成功"+s.getRemoteSocketAddress());
ServerThread serverthread=new ServerThread(s);
serverthread.start();
}
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
pw.close();
br.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
class ServerThread extends Thread
{
BufferedReader br= null;
PrintWriter pw=null;
static Scanner scanner=new Scanner(System.in);
Socket socket;
public ServerThread(Socket socket){
this.socket=socket;
}
public void run(){
try {
br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
pw=new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
while(true){
String string=br.readLine();
System.out.println("Server读到:"+string);
System.out.println("Server端请输入:");
String str=scanner.next();
pw.println(str);
pw.flush();
if(str.equals("exit")){
break;
}
}
}
catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
pw.close();
br.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
客户端
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class Client {
private static PrintWriter pw=null;
private static BufferedReader br=null;
private static Socket s;
static Scanner scanner=new Scanner(System.in);
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
Socket s=new Socket(InetAddress.getLocalHost(),8888);
pw=new PrintWriter(new OutputStreamWriter(s.getOutputStream()));
br=new BufferedReader(new InputStreamReader(s.getInputStream()));
while(true){
System.out.println("Client端请输入:");
String str = scanner.next();
pw.println(str);
pw.flush();
String string=br.readLine();
System.out.println("Client读到:"+string);
if(str.equals("exit")){
break;
}
}
}catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
br.close();
pw.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
上一篇: 脾气还挺大,我说错了吗
下一篇: 立秋季吃啥海鲜好?