• JAVA入门到精通-第89讲-山寨QQ项目3-聊天界面.对象流


    当点击某一个好友出现聊天的界面:


    文本域:JTextArea


    -------------------------------------------
    更改窗口小图标:
    this.setIconImage
    ((new ImageIcon("image/qq.gif").getImage()));


    ----------------------
    显示“和谁聊天”传参数进来String friend;



    ---------------------------
    传参数new QqChat (friendNo);
    ---------------------------------
    登录界面-好友列表界面
    把登录请求发送给后台服务器,
    服务器进行 验证,正确,通过,进入好友列表界面;
    否则,出错提示;
    理论上到数据库验证;


    -------------------
    -QqServer
    -com.qq.server.view
    -com.qq.server.model
    -com.qq.server.tools
    -com.qq.common

    -QQserver服务器端控制界面
    选项卡;




    -model建MyQqServer类,QQ服务器
     它在监听,等待某个QQ客户端来连接

    首先是一个构造函数:public MyQqServer()
    监听,在哪个机子上启动,在哪个机子上监听;

    -以对象流方式处理ObjectInputStream

    客户端发送号码、密码,看成一个对象user;
    认为是一个对象在网络上传输,
    以对象为单位进行接收;
    软件公司一般以XML格式传递;


    readObject ( );
    User u=(User) ois.readObject ();

    -User对象需要在公用包common中定义:
    在客户端、服务器端都需要声明;不声明是不行的;

    User的结构和属性都需要定义、声明;
    没有的话是不能通讯的;

    writeObject(u);传送对象;

    服务器端读取:

    -JAVA对象的序列化Serializable:
    对象保存在文件,或放在网络上传输需要序列化
    只需要实现一个接口就行了
    implements  java.io.Serializable
    JAVA的反射机制达到这个目的的;

    一个对象通过序列化是可以在网络上传输的,
    这样可以不用考虑message的各种格式;



    补充讲解:

    如何在网络间传递对象?

    [MyServer.java]服务器源代码

    x
    1
    package com.test.server;
    2
     
    3
    import java.io.ObjectInputStream;
    4
    import java.net.ServerSocket;
    5
    import java.net.Socket;
    6
    import com.common.User;
    7
     
    8
    public class MyServer {
    9
        ServerSocket ss;
    10
        Socket s;
    11
        ObjectInputStream ois;
    12
       
    13
        public static void main(String[] args) {
    14
            new MyServer();
    15
        }
    16
       
    17
        //构造函数
    18
        public MyServer(){
    19
            try {
    20
                ss=new ServerSocket(3456);
    21
                s=ss.accept();
    22
                //以对象流的方式读取(假设客户端发送的是User的一个对象)
    23
                ois=new ObjectInputStream(s.getInputStream());
    24
                User u=(User)ois.readObject();
    25
                //输出
    26
                System.out.println(u.getName()+"	"+u.getPasswd());
    27
               
    28
            } catch (Exception e) {
    29
                e.printStackTrace();
    30
            }finally{
    31
                try {
    32
                    if(ois!=null) ois.close();
    33
                    if(s!=null) s.close();
    34
                    if(ss!=null) ss.close();
    35
                } catch (Exception e2) {
    36
                    e2.printStackTrace();
    37
                }
    38
            }
    39
        }
    40
    }

    [User.java]服务端的公共服务

    20
    20
     
    1
    package com.common;
    2
     
    3
    import java.io.Serializable;
    4
     
    5
    public class User implements Serializable{
    6
        private String name;
    7
        private String passwd;
    8
        public String getName() {
    9
            return name;
    10
        }
    11
        public void setName(String name) {
    12
            this.name = name;
    13
        }
    14
        public String getPasswd() {
    15
            return passwd;
    16
        }
    17
        public void setPasswd(String passwd) {
    18
            this.passwd = passwd;
    19
        }
    20
    }

     

    [MyClient.java]客户端源代码

    x
    1
    package com.test.client;
    2
     
    3
    import java.io.ObjectOutputStream;
    4
    import java.net.Socket;
    5
    import com.common.User;
    6
     
    7
    public class MyClient {
    8
        Socket s;
    9
        ObjectOutputStream oos;
    10
       
    11
        public static void main(String[] args) {
    12
            new MyClient();
    13
        }
    14
     
    15
        //构造函数
    16
        public MyClient(){
    17
            try {
    18
                s=new Socket("127.0.0.1",3456);
    19
                //通过ObjectOutputStream给服务器传送对象
    20
                oos=new ObjectOutputStream(s.getOutputStream());
    21
                User u=new User();
    22
                u.setName("张三");
    23
                u.setPasswd("123");
    24
                oos.writeObject(u);
    25
            } catch (Exception e) {
    26
                e.printStackTrace();
    27
            }finally{
    28
                try {
    29
                    if(oos!=null) oos.close();
    30
                    if(s!=null) s.close();
    31
                } catch (Exception e2) {
    32
                    e2.printStackTrace();
    33
                }
    34
            }
    35
        }
    36
    }

     

    [User.java]客户端的公共服务

    21
     
    1
    package com.common;
    2
     
    3
    import java.io.Serializable;
    4
    //通过io在网络上传送对象需要进行序列化Serializable
    5
    public class User implements Serializable{
    6
        private String name;
    7
        private String passwd;
    8
       
    9
        public String getName() {
    10
            return name;
    11
        }
    12
        public void setName(String name) {
    13
            this.name = name;
    14
        }
    15
        public String getPasswd() {
    16
            return passwd;
    17
        }
    18
        public void setPasswd(String passwd) {
    19
            this.passwd = passwd;
    20
        }
    21
    }

    特别说明:

    java网络编程需要通过IO流实现对象的传递需要对,服务端和客户端定义相同的传递对对向方法,以达到实现对象的传递。同时需要对方法进行Serializable序列化,否则报错。




















  • 相关阅读:
    jenkins+svn+Ant+tomcat+非maven项目构建
    阿里云服务器CentOS6.9安装jenkins
    jenkins构建项目时报错缺少com.sun.image.codec.jpeg包解决方案
    不间断会话服务:screen
    数据库备份与还原:mysqldump,source
    多表更新:update,join
    删除数据高级用法:delete,truncate
    远程传输文件命令:scp
    远程控制服务:配置sshd服务,密钥验证登陆
    绑定多块网卡:负载均衡
  • 原文地址:https://www.cnblogs.com/xuxaut-558/p/10047900.html
Copyright © 2020-2023  润新知