`

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; 

    } 

     

} 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics