package cn.com.pb.multi; import java.net.*; import java.io.*; public class LoginClient { public static void main(String[] args) { try { //建立客户端Socket连接,指定服务器的位置以及端口 Socket socket=new Socket("localhost",8800); //打开输入输出流 OutputStream os=socket.getOutputStream(); InputStream is=socket.getInputStream(); //对象序列化 ObjectOutputStream oos=new ObjectOutputStream(os); //发送客户端登录信息,即向输出流写入信息 User user=new User(); user.setLoginName("Tom"); user.setPwd("123456"); oos.writeObject(user); socket.shutdownOutput(); //接收服务器段的响应,即从输入流读取信息 String reply=null; BufferedReader br=new BufferedReader(new InputStreamReader(is)); while(!((reply=br.readLine())==null)){ System.out.println("我是客户端,服务器的响应为:"+reply); } //4.关闭资源 oos.close(); is.close(); os.close(); socket.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
package cn.com.pb.multi; import java.net.*; import java.io.*; public class LoginClient2 { public static void main(String[] args) { try { //建立客户端Socket连接,指定服务器的位置以及端口 Socket socket=new Socket("localhost",8800); //打开输入输出流 OutputStream os=socket.getOutputStream(); InputStream is=socket.getInputStream(); //对象序列化 ObjectOutputStream oos=new ObjectOutputStream(os); //发送客户端登录信息,即向输出流写入信息 User user=new User(); user.setLoginName("Kate"); user.setPwd("654321"); oos.writeObject(user); socket.shutdownOutput(); //接收服务器段的响应,即从输入流读取信息 String reply=null; BufferedReader br=new BufferedReader(new InputStreamReader(is)); while(!((reply=br.readLine())==null)){ System.out.println("我是客户端,服务器的响应为:"+reply); } //4.关闭资源 oos.close(); is.close(); os.close(); socket.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
package cn.com.pb.multi; import java.net.*; import java.io.*; public class LoginServer { public static void main(String[] args) { try { //建立一个服务器Socket(ServerSocket)指定端口并开始监听 ServerSocket serverSocket=new ServerSocket(8800); //使用accept()方法等待客户端触发通信 Socket socket=null; //监听一直进行中 while(true){ socket=serverSocket.accept(); LoginThread LoginThread=new LoginThread(socket); LoginThread.start(); } } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
package cn.com.pb.multi; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; public class LoginThread extends Thread { Socket socket=null; //每启动一个线程,对应Socket public LoginThread(Socket socket){ this.socket=socket; } //启动线程,即响应客户请求 public void run(){ try { //打开输入输出流 InputStream is=socket.getInputStream(); OutputStream os=socket.getOutputStream(); //反序列化 ObjectInputStream ois=new ObjectInputStream(is); //获取客户端信息,即从输入流读取信息 //BufferedReader br=new BufferedReader(new InputStreamReader(ois)); User user=(User)ois.readObject(); if(!(user==null)){ System.out.println("我是服务器,客户登录信息为:"+user.getLoginName()+","+user.getPwd()); } //给客户端一个响应,即向输出流写入信息 String reply="欢迎你,登录成功!"; os.write(reply.getBytes()); //关闭资源 ois.close(); os.close(); is.close(); socket.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }catch (ClassNotFoundException e) { e.printStackTrace(); } } }
package cn.com.pb.multi; import java.io.Serializable; /** * 用户类 * */ public class User implements Serializable{ private String loginName; //用户名 private String pwd; //用户密码 public User() { } public User(String loginName, String pwd) { super(); this.loginName = loginName; this.pwd = pwd; } public String getLoginName() { return loginName; } public void setLoginName(String loginName) { this.loginName = loginName; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } }