zoukankan      html  css  js  c++  java
  • 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序列化,否则报错。




















  • 相关阅读:
    Linked List Cycle leetcode java (链表检测环)
    Remove Duplicates from Sorted List II leetcode java
    Remove Duplicates from Sorted List leetcode java
    Merge Two Sorted Lists leetcode java
    Swap Nodes in Pairs leetcode java
    Median of Two Sorted Array leetcode java
    阿里云最便宜的四种域名注册
    nohup和&后台运行,进程查看及终止
    ipv6转ipv4 NAT64与DNS64基本原理概述
    ros使用pppoe拨号获取ipv6,并且下发IPV6的dns到客户机win7
  • 原文地址:https://www.cnblogs.com/xuxaut-558/p/10047900.html
Copyright © 2011-2022 走看看