• 47.多客户端用户登录


    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;
        }
    }
  • 相关阅读:
    强烈免费25款商务logo设计模板 java程序员
    16个帮助你高效测试响应式设计界面的工具 java程序员
    一个帮助你生成iOS文件夹效果的jQuery插件 AppFolders java程序员
    Linq 实现左连接,右连接 java程序员
    一个帮助你实现pinterest页面布局的jQuery插件 jQuery.Shapeshift java程序员
    基于HTML5实现的超酷摄像头(HTML5 webcam)拍照功能 photobooth.js java程序员
    30个让你保持好身材的iphone健康应用程序 java程序员
    一个实体对象不能由多个 IEntityChangeTracker 实例引用 解决办法 java程序员
    2012年十一月GBin1 web技术热点荟萃 java程序员
    超棒的20款javascript工具提示条(tooltips)类库 java程序员
  • 原文地址:https://www.cnblogs.com/xiaotaoxu/p/5536596.html
Copyright © 2020-2023  润新知