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;

    }

    

}

原文地址:https://www.cnblogs.com/luowei010101/p/2138350.html