`

Java笔记9(Java网络编程)

    博客分类:
  • Java
 
阅读更多
Java基础9
Java基础9    1

文件结构    1

Java网络编程_netTest1Client/com.test1/MyClient1.java    1

Java网络编程_netTest1Client/com.test1/MyServer1.java    3

Java网络编程_netTest2Client/com.test1/MyClient2.java    4

Java网络编程_netTest2Client/com.test1/ MyServer2.java    5

Java网络编程_netTest3Client/com.test1/MyClient3.java    7

Java网络编程_netTest3Client/com.test1/ MyServer3.java    9

Java网络编程_netTestClient/com.test1/MyServer.java    11

Java网络编程_netTestClient/com.common/User.java    12

Java网络编程_netTestClient/com.test1/MyClient.java    12

Java网络编程_netTestClient/com.common/User.java    13


文件结构

Java网络编程_netTest1Client/com.test1/MyClient1.java 

 

/** 

* 这是一个客户端程序,可以连接服务器端 

*/ 

 

package com.test1; 

 

import java.io.*; 

import java.net.*; 

 

public class MyClient1 { 

 

    /** 

     * @param args 

     */ 

    public static void main(String[] args) { 

        // TODO Auto-generated method stub 

        MyClient1 mc1=new MyClient1(); 

    } 

     

    public MyClient1() 

    { 

        try { 

            //Socket()就是去连接某个服务器端,127.0.0.1表示服务器的IP 

            //9999就是端口号 

            Socket s=new Socket("127.0.0.1",9999); 

            //如果s连接成功,就可以发送数据给服务器 

            //通过pw,向s写数据,true表示即时刷新 

            PrintWriter pw=new PrintWriter(s.getOutputStream(),true); 

            pw.println("你好吗?我是客户端"); 

             

            //客户端接收 

            InputStreamReader isr=new InputStreamReader(s.getInputStream()); 

            BufferedReader br=new BufferedReader(isr); 

             

            String response=br.readLine(); 

             

            System.out.println("我是客户端!\n我收到了服务器回复的信息:"+response); 

             

        } catch (IOException e) { 

            e.printStackTrace(); 

        } 

    } 

} 

 

Java网络编程_netTest1Client/com.test1/MyServer1.java 

 

/** 

* 这是第一个服务器端程序,让它在9999端口监听 

* 可以接收从客户端发来的信息 

*/ 

 

package com.test1; 

import java.io.*; 

import java.net.*; 

 

public class MyServer1 { 

     

    public static void main(String []args) 

    { 

        MyServer1 ms1=new MyServer1(); 

    } 

     

    public MyServer1() 

    { 

        try { 

            //在9999号端口监听 

            ServerSocket ss=new ServerSocket(9999); 

            System.out.println("我是服务器,在9999端口监听..."); 

            //等待某个客户端来连接,该函数会返回一个Scoket连接 

            Socket s=ss.accept(); 

            System.out.println("有客户端连接"); 

             

            //要读取取s中传递的数据 

            InputStreamReader isr=new InputStreamReader(s.getInputStream()); 

            BufferedReader br=new BufferedReader(isr); 

             

            String info=br.readLine(); //读 

             

            System.out.println("服务器接收到:"+info); 

             

            //服务器回复一句话 

            PrintWriter pw=new PrintWriter(s.getOutputStream(),true);//true表示即时刷新 

            pw.println("我是服务器,客户端你也好!"); 

             

        } catch (IOException e) { 

            e.printStackTrace(); 

        } 

    } 

} 

 

Java网络编程_netTest2Client/com.test1/MyClient2.java 

 

/** 

* 半双工通信 

* 功能:客户端 

*/ 

 

package com.test1; 

import java.net.*; 

import java.io.*; 

 

public class MyClient2 { 

 

    /** 

     * @param args 

     */ 

    public static void main(String[] args) { 

        // TODO Auto-generated method stub 

        MyClient2 mc2=new MyClient2(); 

    } 

 

    public MyClient2() 

    { 

        try { 

            //连接服务器端 

            Socket s=new Socket("127.0.0.1",9999); 

            //向s写入数据 

            PrintWriter pw=new PrintWriter(s.getOutputStream(),true); 

             

            //先接收从控制台输入的信息 

            InputStreamReader isr=new InputStreamReader(System.in); 

            BufferedReader br=new BufferedReader(isr); 

             

            //接收从服务器端发送过来的信息 

            InputStreamReader isr2=new InputStreamReader(s.getInputStream()); 

            BufferedReader br2=new BufferedReader(isr2); 

             

            while(true) 

            { 

                System.out.println("请输入你想对服务器说的话:"); 

                //客户端先从控制台接收 

                String info=br.readLine(); 

                 

                //然后把从控制台输入的信息发送给服务器 

                pw.println(info); 

                if(info.equals("bye")) 

                { 

                    System.out.println("对话结束"); 

                    s.close(); 

                    break; 

                } 

                //接收从服务器发来的话 

                String res=br2.readLine(); 

                System.out.println("服务器说:"+res); 

            } 

             

        } catch (IOException e) { 

            e.printStackTrace(); 

        } 

         

    } 

} 

 

Java网络编程_netTest2Client/com.test1/ MyServer2.java 

 

/** 

* 半双工通信 

* 功能:一个服务器端,在9999端口上监听 

*/ 

 

package com.test1; 

import java.io.BufferedReader; 

import java.io.IOException; 

import java.io.InputStreamReader; 

import java.io.PrintWriter; 

import java.net.*; 

import java.io.*; 

 

public class MyServer2 { 

 

    /** 

     * @param args 

     */ 

    public static void main(String[] args) { 

        // TODO Auto-generated method stub 

        MyServer2 ms2=new MyServer2(); 

    } 

     

    public MyServer2() 

    { 

        try { 

            //在9999端口监听 

            ServerSocket ss=new ServerSocket(9999); 

            System.out.println("服务器在9999监听..."); 

            //等待连接 

            Socket s=ss.accept(); 

             

            //向s中写信息 

            PrintWriter pw=new PrintWriter(s.getOutputStream(),true); 

             

            //先接收客户端发来的信息(Socket上的) 

            InputStreamReader isr=new InputStreamReader(s.getInputStream()); 

            BufferedReader br=new BufferedReader(isr); 

             

            //接收从控制台输入的信息 

            InputStreamReader isr2=new InputStreamReader(System.in); 

            BufferedReader br2=new BufferedReader(isr2); 

             

            while(true) 

            { 

                String infoFromClient=br.readLine(); 

                System.out.println("客户端发来:"+infoFromClient); 

                if(infoFromClient.equals("bye")) 

                { 

                    System.out.println("对话结束!"); 

                    s.close(); 

                    break; 

                } 

                 

                //接收从控制台输入的信息 

                System.out.println("输入你希望对客户端说的话:"); 

                String response=br2.readLine(); 

                //把从控制台接受的信息送给客户端 

                pw.println(response); 

            } 

             

        } catch (IOException e) { 

            e.printStackTrace(); 

        } 

    } 

} 

 

Java网络编程_netTest3Client/com.test1/MyClient3.java 

 

/** 

* 全双工通信 

* 客户 

*/ 

 

package com.test1; 

 

import javax.swing.*; 

 

import java.awt.event.ActionEvent; 

import java.awt.event.ActionListener; 

import java.io.*; 

import java.net.*; 

 

public class MyClient3 extends JFrame implements ActionListener{ 

 

    JTextArea jta=null; 

    JTextField jtf=null; 

    JButton jb=null; 

    JScrollPane jsp=null; 

    JPanel jp1=null; 

     

    //把信息发给客户端的对象 

    PrintWriter pw=null; 

     

    public static void main(String[] args) { 

        // TODO Auto-generated method stub 

        MyClient3 ms=new MyClient3(); 

    } 

     

    public MyClient3() 

    { 

        jta=new JTextArea(); 

        jsp=new JScrollPane(jta); 

        jtf=new JTextField(10); 

        jb=new JButton("发送"); 

        jb.addActionListener(this); 

         

        jp1=new JPanel(); 

        jp1.add(jtf); 

        jp1.add(jb); 

        this.add(jsp,"Center"); 

        this.add(jp1,"South"); 

 

        this.setSize(300,200); 

        this.setTitle("QQ简易聊天-客户端"); 

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

        this.setVisible(true); 

         

        try { 

            Socket s=new Socket("127.0.0.1",9988); 

             

            InputStreamReader isr=new InputStreamReader(s.getInputStream()); 

            BufferedReader br=new BufferedReader(isr); 

             

            pw=new PrintWriter(s.getOutputStream(),true); 

            while(true) 

            { 

                //不停的读取从服务器发来的信息 

                String info=br.readLine(); 

                jta.append("服务器端对客户端说: "+info+"\r\n"); 

            } 

        } catch (Exception e) { 

            e.printStackTrace(); 

        } 

         

    } 

 

    @Override 

    public void actionPerformed(ActionEvent e) { 

        //如果用户按下发送信息的按钮 

        if(e.getSource()==jb) 

        { 

            //把服务器在jtf写的内容发送给客户端 

            String info=jtf.getText(); 

            //把客户端显示的信息加到jta 

            jta.append("客户端对服务器说: "+info+"\r\n"); 

            pw.println(info); 

            //清空jtf中的内容 

            jtf.setText(""); 

        } 

    } 

 

} 

 

Java网络编程_netTest3Client/com.test1/ MyServer3.java 

 

/** 

* 全双工通信 

* 服务器端 

*/ 

 

package com.test1; 

import javax.swing.*; 

 

import java.awt.event.ActionEvent; 

import java.awt.event.ActionListener; 

import java.io.*; 

import java.net.*; 

 

public class MyServer3 extends JFrame implements ActionListener{ 

 

    JTextArea jta=null; 

    JTextField jtf=null; 

    JButton jb=null; 

    JScrollPane jsp=null; 

    JPanel jp1=null; 

     

    //把信息发给客户端的对象 

    PrintWriter pw=null; 

     

    public static void main(String[] args) { 

        // TODO Auto-generated method stub 

        MyServer3 ms=new MyServer3(); 

    } 

     

    public MyServer3() 

    { 

        jta=new JTextArea(); 

        jsp=new JScrollPane(jta); 

        jtf=new JTextField(10); 

        jb=new JButton("发送"); 

        jb.addActionListener(this); 

         

        jp1=new JPanel(); 

        jp1.add(jtf); 

        jp1.add(jb); 

        this.add(jsp,"Center"); 

        this.add(jp1,"South"); 

 

        this.setSize(300,200); 

        this.setTitle("QQ简易聊天-服务器端"); 

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

        this.setVisible(true); 

         

        try { 

            //服务器监听 

            ServerSocket ss=new ServerSocket(9988); 

            //等待客户端连接 

            Socket s=ss.accept(); 

            //System.out.println("服务器端在9988监听!"); 

             

            InputStreamReader isr=new InputStreamReader(s.getInputStream()); 

            BufferedReader br=new BufferedReader(isr); 

             

            pw=new PrintWriter(s.getOutputStream(),true); 

             

            //读取从客户端发来的信息 

            while(true) 

            { 

                //读取从客户端发来的信息 

                String info=br.readLine(); 

                //把信息显示加到文本域中(以追加的形式) 

                jta.append("客户端对服务器说: "+info+"\r\n"); 

            } 

        } catch (IOException e) { 

            e.printStackTrace(); 

        } 

    } 

 

    @Override 

    public void actionPerformed(ActionEvent e) { 

        //如果用户按下发送信息的按钮 

        if(e.getSource()==jb) 

        { 

            //把服务器在jtf写的内容发送给客户端 

            String info=jtf.getText(); 

            jta.append("服务器端对客户端说: "+info+"\r\n"); 

            pw.println(info); 

            //清空jtf中的内容 

            jtf.setText(""); 

        } 

    } 

} 

 

Java网络编程_netTestClient/com.test1/MyServer.java 

 

/** 

* 功能:网络这间利用 对象流 

*/ 

 

package com.test1; 

 

import java.net.*; 

import java.io.*; 

import java.awt.*; 

import java.awt.event.*; 

import javax.swing.*; 

 

import com.common.*; 

 

public class MyServer { 

 

    /** 

     * @param args 

     */ 

    public static void main(String[] args) { 

        // TODO Auto-generated method stub 

        MyServer ms=new MyServer(); 

    } 

 

    public MyServer() 

    { 

        try { 

            ServerSocket ss=new ServerSocket(3456); 

            System.out.println("服务器在3456端口监听..."); 

            Socket s=ss.accept(); 

            //以对象流方式读取(假设客户端发送的是User的一个对象) 

            ObjectInputStream ois=new ObjectInputStream(s.getInputStream()); 

            User u=(User)ois.readObject();//读取对象 

             

            //输出 

            System.out.println("从客户端接收到:"+u.getName()+" "+u.getPass()); 

            s.close(); 

        } catch (Exception e) { 

            e.printStackTrace(); 

        } 

         

    } 

} 

 

Java网络编程_netTestClient/com.common/User.java 

 

package com.common; 

 

public class User implements java.io.Serializable{ 

    //将这个类实现序列化 

    private String name; 

    private String pass; 

    public String getName() { 

        return name; 

    } 

    public void setName(String name) { 

        this.name = name; 

    } 

    public String getPass() { 

        return pass; 

    } 

    public void setPass(String pass) { 

        this.pass = pass; 

    } 

     

} 

 

Java网络编程_netTestClient/com.test1/MyClient.java 

 

package com.test1; 

import java.io.*; 

import java.net.*; 

 

import com.common.User; 

import com.test1.*; 

public class MyClient { 

 

    /** 

     * @param args 

     */ 

    public static void main(String[] args) { 

        // 

        MyClient mc=new MyClient(); 

    } 

 

    public MyClient() 

    { 

        try { 

            Socket s=new Socket("127.0.0.1",3456); 

            //通过ObjectOutputStream给服务器传送对象 

            ObjectOutputStream oos=new ObjectOutputStream(s.getOutputStream()); 

            User u=new User(); 

            u.setName("维唯为为"); 

            u.setPass("123456"); 

            oos.writeObject(u); //写入对象流 

            //如果希望一个对象在网络上传输,则需要把这个对象序列化 

            //System.out.println("ok"); 

            s.close(); 

        } catch (Exception e) { 

            e.printStackTrace(); 

        } 

         

    } 

} 

 

Java网络编程_netTestClient/com.common/User.java 

 

package com.common; 

 

public class User implements java.io.Serializable{ 

    //将这个类实现序列化 

    private String name; 

    private String pass; 

    public String getName() { 

        return name; 

    } 

    public void setName(String name) { 

        this.name = name; 

    } 

    public String getPass() { 

        return pass; 

    } 

    public void setPass(String pass) { 

        this.pass = pass; 

    } 

     

} 

分享到:
评论

相关推荐

    java网络编程笔记

    #### 标题解析:Java网络编程笔记 在当今数字化时代,网络编程已成为软件开发中不可或缺的一部分,尤其在J2EE(Java 2 Platform, Enterprise Edition)框架下,其重要性更为凸显。J2EE为构建企业级应用提供了强大的...

    Java游戏编程读书笔记

    通过阅读《Java游戏编程读书笔记》这本书,你可以深入了解这些概念并学习如何将它们应用到实际项目中。文档中的内容可能涵盖了Java游戏开发的基本原理、代码示例、最佳实践以及常见问题的解决方案。通过深入学习和...

    李兴华java笔记

    《李兴华Java实战经典笔记》是一份深入探讨Java编程技术的宝贵资料,由知名IT教育专家李兴华编撰。这份笔记集合了他在教学和实践中积累的丰富经验,旨在帮助学习者掌握Java的核心概念、设计模式以及实战技巧。通过这...

    宋红康java笔记.rar

    【宋红康java笔记】是一份综合性的Java学习资料,由知名编程教育者宋红康编撰。这份压缩包文件包含了大量的Java编程知识点,旨在帮助初学者和有经验的开发者深入理解和掌握Java语言的核心概念与高级特性。以下是根据...

    java笔记 java笔记

    Java是一种广泛使用的面向对象的编程语言,因其跨平台性、安全性和强大的功能而受到欢迎。Java的设计理念是“一次编写,到处运行”,这意味着编写的Java程序可以在任何安装了Java虚拟机(JVM)的设备上运行。 #### ...

    狂神说Java笔记资料

    《狂神说Java笔记资料》是一份全面涵盖Java开发基础知识的文档集,旨在帮助学习者系统地掌握Java编程。这份笔记包含多个章节,每个章节都深入讲解了一个特定的主题,覆盖了从初学者到进阶开发者必备的知识点。 1. *...

    java全套笔记 来自狂神说java笔录.zip

    【Java笔记内容概览】 1. **基础语法**:涵盖变量、数据类型、运算符、流程控制(条件语句、循环语句)、数组、字符串等基础知识。 2. **面向对象**:讲解类、对象、封装、继承、多态等核心概念,以及构造函数、...

    非常好的java笔记适合初学者

    总的来说,这份"非常好的java笔记"是初学者学习Java编程的理想教材,它将引导读者逐步掌握编程基础,理解面向对象编程思想,以及熟悉Java特性和库的使用。通过系统的阅读和实践,初学者能够建立起坚实的Java编程基础...

    一部分网络编程笔记总结

    这些笔记主要涵盖了Java网络编程的基础概念、核心技术以及一些实践应用。下面将详细展开讲解相关知识点。 1. **网络基础知识**:网络编程首先需要理解TCP/IP协议族,包括IP地址、端口号、传输层(TCP/UDP)以及应用...

    大佬的java笔记

    专业的Java笔记可能会涉及这些内容,帮助学习者掌握Java的最新发展。 遗憾的是,由于【部分内容】部分不包含实际的笔记内容,无法进一步提供具体的编程示例和深入的解释。如果要学习Java,最好的方式是从学习Java的...

    毕向东Java笔记

    ### 毕向东Java笔记知识点总结 #### 第一章:编程基础 1. **Java的特性和优势**: - **简单性**:Java的设计哲学是“使编程变得简单”。 - **面向对象**:Java完全支持面向对象编程概念如封装、继承和多态。 - ...

    java笔记.zip

    尚硅谷康师傅java学习笔记。 、2020-4-5 java学习笔记 2020-4-6 java笔记 ---内部类 2020-4-6 java笔记 ---异常 ...2020-4-19 java 网络编程 2020-4-21 java反射 2020-4-22 java8 新特性 2020-4-27 单元测试

    Java笔记桌面程序

    本项目名为"Java笔记桌面程序",它是由一个热衷于编程的开发者为解决其所在公司无法使用网络笔记客户端的问题而自创的。这个程序采用Java语言编写,充分体现了Java的跨平台特性,可以在多种操作系统上运行,包括...

    java编程思想笔记

    java编程思想笔记,建议与书本结合使用。。。。。。。。。。。

    韩顺平编写的java学习笔记(全)

    #### Java编程方向 - **Java SE (J2SE)**:桌面应用开发的基础。 - **Java EE (J2EE)**:Web应用开发。 - **Java ME (J2ME)**:移动设备应用开发。 #### Java SE课程内容 1. **面向对象编程**:Java的核心概念之...

    java学习笔记markdown

    这份笔记涵盖了Java编程的基础到高级概念,包括但不限于以下知识点: 1. **Java基础**:介绍Java语言的基本语法,如变量、数据类型、运算符、控制流程(条件语句、循环)、数组、字符串以及异常处理。这些基础知识...

    java超强笔记

    Java编程语言是软件开发领域的重要组成部分,尤其对于初学者来说,掌握Java的基础知识至关重要。"Java超强笔记"正是一份专为新手准备...通过系统地学习这份笔记,你将能够熟练掌握Java编程,并具备解决实际问题的能力。

    java读书笔记笔记笔记笔记笔记笔记

    【标题】"java读书笔记笔记笔记笔记笔记笔记" 暗示了这是一份关于Java编程语言的学习笔记,可能包含了作者在阅读Java相关书籍时所做的重要记录和理解。笔记通常涵盖了语言的基础概念、核心特性、类与对象、内存管理...

    《java学习》-java学习笔记.zip

    Java是一种广泛使用的面向对象的编程语言,以其跨平台、健壮性和安全性著称。这份《java学习》笔记包含了多个...记得实践是检验真理的唯一标准,理论学习之余,多编写代码,解决实际问题,才能真正提升Java编程技能。

Global site tag (gtag.js) - Google Analytics