一个服务端与多个客户端交互的例子
package j2se.socket; import java.io.*; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; /** * Created by jingqing.zhou on 2015/6/17. * 基于tcp协议的socket通信,实现用户登录 * 服务器端 */ public class server { public static void main(String[] args) { //1.创建一个服务器端socket try { ServerSocket sst = new ServerSocket(8999); System.out.println("服务器即将启动,等待客户端的链接=====>"); //记录客户端的数量 int count = 0 ; while (true){ Socket socket = sst.accept();//阻塞,等待客户端请求 //创建一个新的线程 ServerThread serverThread = new ServerThread(socket); //启动线程 serverThread.start(); count ++ ; System.out.println("当前客户连接数"+count); InetAddress address = socket.getInetAddress(); System.out.println("当前客户端的ip地址:"+address.getHostAddress()); } } catch (IOException e) { e.printStackTrace(); } } }
package j2se.socket; import java.io.*; import java.net.ServerSocket; import java.net.Socket; /** * Created by jingqing.zhou on 2015/6/17. * 基于tcp协议的socket通信,实现用户登录 * 服务器端线程处理类 */ public class ServerThread extends Thread{ //和本线程相关的socket Socket socket = null ; public ServerThread(Socket socket){ this.socket = socket; } //线程的执行操作,响应客户端的请求 public void run(){ //获取输入流,并读取客户端信息 InputStream is =null; InputStreamReader isr=null ; BufferedReader bufferedReader =null ; OutputStream os=null ; PrintWriter pw=null ; try { is = socket.getInputStream();//字节输入流 isr = new InputStreamReader(is);//将字节流包装为字符流 bufferedReader = new BufferedReader(isr);//为输入流添加缓冲 String info = null; //循环读取客户端信息 while ((info = bufferedReader.readLine()) != null) { System.out.println("我是服务器,客户端说:" + info); } socket.shutdownInput();//关闭输入流 //获取输出流,用于响应客户端请求 os = socket.getOutputStream(); pw = new PrintWriter(os);//将输出流包装为打印流 pw.write("欢迎您:admin!!"); pw.flush(); }catch (IOException e){ e.printStackTrace(); }finally { //关闭资源 try{ bufferedReader.close(); pw.close(); os.close(); isr.close(); is.close(); socket.close(); }catch (IOException e){ e.printStackTrace(); } } } }
package j2se.socket; import java.io.*; import java.net.Socket; /** * Created by jingqing.zhou on 2015/6/17. */ public class client { public static void main(String[] args) { try { //创建客户端socket,指定服务器地址和端口 Socket socket = new Socket("localhost",8999); //获取输出流,用来向服务器端发送信息 OutputStream os = socket.getOutputStream(); PrintWriter pw = new PrintWriter(os);//将输出流包装为打印流 pw.write("用户名:admin1111;密码:123"); pw.flush(); socket.shutdownOutput();//关闭输出流 //获取输入流,并读取服务器端的响应信息 InputStream is = socket.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String info = null ; //循环读取服务器端信息 while ((info = br.readLine())!=null){ System.out.printf("我是客户端,服务器端说:"+ info); } socket.shutdownInput();//关闭输入流 br.close(); is.close(); pw.close(); os.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } }
时间: 2024-10-12 16:47:27