1 package demo12; 2 3 import java.io.BufferedReader; 4 import java.io.InputStream; 5 import java.io.InputStreamReader; 6 import java.io.OutputStream; 7 import java.net.InetAddress; 8 import java.net.Socket; 9 10 /** 11 *线程类 12 *接收客户请求,给予客户一个响应 13 *线程构造方法中去绑定客户的Socket 14 * @author BCh_Chen 15 * 16 */ 17 public class LoginThread extends Thread{ 18 private Socket socket; 19 20 public LoginThread(Socket socket) { 21 this.socket=socket; 22 } 23 24 @Override 25 public void run() { 26 try { 27 //获得输入流,获得用户的请求 28 InputStream is=socket.getInputStream(); 29 BufferedReader br=new BufferedReader(new InputStreamReader(is)); 30 String info; 31 while((info=br.readLine())!=null) { 32 System.out.println("客户端发来的信息:"+info); 33 } 34 35 //获得客户端的IP地址 36 InetAddress ia=socket.getInetAddress(); 37 String ip=ia.getHostAddress(); 38 System.out.println("相应客户端的IP:"+ip); 39 40 41 //给客户端一个响应 42 String reply="登录成功!"; 43 //通过输出流将响应发送回客户端 44 OutputStream os=socket.getOutputStream(); 45 os.write(reply.getBytes()); 46 47 //释放相应资源 48 os.close(); 49 is.close(); 50 socket.close(); 51 }catch(Exception e) { 52 e.printStackTrace(); 53 } 54 } 55 56 57 }
1 package demo12; 2 3 import java.io.IOException; 4 import java.net.ServerSocket; 5 import java.net.Socket; 6 7 import demo12.LoginThread; 8 9 public class LoginServer { 10 public static void main(String[] args) { 11 try { 12 //创建一个Socket 13 ServerSocket serverSocket=new ServerSocket(8888); 14 while(true) { 15 //使用accept()侦听并接收到此ServerSocket的连接 16 Socket socket=serverSocket.accept(); 17 //创建一个和该客户端响应的线程 18 LoginThread loginThread=new LoginThread(socket); 19 //启动线程 20 loginThread.start(); 21 } 22 23 } catch (IOException e) { 24 e.printStackTrace(); 25 } 26 } 27 }
package demo12; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.Socket; /** * 模拟用户登录的功能,客户端发送登录信息请求,服务器接收请求并回应 * @author BCh_Chen * */ public class LoginClient { public static void main(String[] args) { try { //发送请求到服务器 //创建一个客户端的Socket Socket socket=new Socket("localhost",8888); //通过输出流发送请求 String info="用户名:kate,密码:111111"; //将字符串打散为字节数组 byte[] infos=info.getBytes(); OutputStream os=socket.getOutputStream(); os.write(infos); socket.shutdownOutput(); //接收服务器回应 InputStream is=socket.getInputStream(); BufferedReader br=new BufferedReader(new InputStreamReader(is)); String reply; while((reply=br.readLine())!=null) { System.out.println("接收服务器信息:"+reply); } //释放相应资源 br.close(); is.close(); os.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } }
1 package demo12; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.InputStreamReader; 7 import java.io.OutputStream; 8 import java.net.Socket; 9 10 /** 11 * 模拟用户登录的功能,客户端发送登录信息请求,服务器接收请求并回应 12 * @author BCh_Chen 13 * 14 */ 15 public class LoginClient2 { 16 public static void main(String[] args) { 17 18 try { 19 //发送请求到服务器 20 //创建一个客户端的Socket 21 Socket socket=new Socket("localhost",8888); 22 //通过输出流发送请求 23 String info="用户名:Tom,密码:123456"; 24 //将字符串打散为字节数组 25 byte[] infos=info.getBytes(); 26 OutputStream os=socket.getOutputStream(); 27 os.write(infos); 28 29 socket.shutdownOutput(); 30 31 //接收服务器回应 32 InputStream is=socket.getInputStream(); 33 BufferedReader br=new BufferedReader(new InputStreamReader(is)); 34 String reply; 35 while((reply=br.readLine())!=null) { 36 System.out.println("接收服务器信息:"+reply); 37 } 38 39 //释放相应资源 40 br.close(); 41 is.close(); 42 os.close(); 43 socket.close(); 44 } catch (IOException e) { 45 e.printStackTrace(); 46 } 47 } 48 }
1 package demo12; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.InputStreamReader; 7 import java.io.OutputStream; 8 import java.net.Socket; 9 10 /** 11 * 模拟用户登录的功能,客户端发送登录信息请求,服务器接收请求并回应 12 * @author BCh_Chen 13 * 14 */ 15 public class LoginClient3 { 16 public static void main(String[] args) { 17 18 try { 19 //发送请求到服务器 20 //创建一个客户端的Socket 21 Socket socket=new Socket("localhost",8888); 22 //通过输出流发送请求 23 String info="用户名:lisa,密码:777777"; 24 //将字符串打散为字节数组 25 byte[] infos=info.getBytes(); 26 OutputStream os=socket.getOutputStream(); 27 os.write(infos); 28 29 socket.shutdownOutput(); 30 31 //接收服务器回应 32 InputStream is=socket.getInputStream(); 33 BufferedReader br=new BufferedReader(new InputStreamReader(is)); 34 String reply; 35 while((reply=br.readLine())!=null) { 36 System.out.println("接收服务器信息:"+reply); 37 } 38 39 //释放相应资源 40 br.close(); 41 is.close(); 42 os.close(); 43 socket.close(); 44 } catch (IOException e) { 45 e.printStackTrace(); 46 } 47 } 48 }
这里实现了三个客户端向一个服务器发送数据,运行时需注意的是先启动服务器,再启动客户端。