Socket网络编程

来源:互联网 发布:淘宝导航尺寸是多少 编辑:程序博客网 时间:2024/06/07 15:41

一: 单双工

MyClient.java

/* * 这是客户端 */package com.test1;//MyClient.javaimport java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;import java.net.UnknownHostException;public class MyClient {    public static void main(String[] args) {        MyClient mc1 = new MyClient();    }    public MyClient(){        try {            //Socket()就是去连接某个服务器端, 192.168.159.1是服务器的IP,9999端口号            Socket s = new Socket("192.168.159.1",9999);            //如果socket连接成功,就可以发送数据给服务器            //通过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("我是客户端,我收到服务器送回的消息:"+response);        } catch (UnknownHostException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

MyServer.java

/* * 单双工 */package com.test1;//MyServer.javaimport java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class Myserverl {    public static void main(String[] args) {        Myserverl msl = new Myserverl();    }    public Myserverl() {        try {            // 在9999号端口监听            ServerSocket ss = new ServerSocket(9999);            System.out.println("我是服务器,在9999端口监听。。。");            // 等到某个客户端来连接,该函数返回一个socket连接            Socket s = ss.accept();            // 要读取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);            pw.println("我是服务器,你也好");        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

二:半双工

MyClient2.java

package com.test2;//MyClient2.javaimport java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;import java.net.UnknownHostException;public class MyClietn2 {    public static void main(String[] args) {        // TODO Auto-generated method stub        MyClietn2 mc = new MyClietn2();    }    public MyClietn2(){        try {            Socket s = new Socket("192.168.159.1",9999);            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")){                     s.close();                     break;                }//              接收从服务器发送来的话                String res = br2.readLine();                System.out.println("服务器说 : "+res);            }        } catch (UnknownHostException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59

MyServer2.java

/* * 服务器 端口号:9999 * 通过控制台,输入会送给客户端的信息  半双工 */package com.test2;//MyServer2.javaimport java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class MyServer2 {    public static void main(String[] args) {        // TODO Auto-generated method stub         MyServer2 ms = new MyServer2();    }    public MyServer2() {        try {//          在端口号9999监听            ServerSocket ss = new ServerSocket(9999);            System.out.println("我是服务器,在9999端口监听。。。");//          等待连接            Socket s = ss.accept();//          先接收客户端发送来的消息            InputStreamReader isr = new InputStreamReader(s.getInputStream());            BufferedReader br = new BufferedReader(isr);//          向客户端写数据            PrintWriter pw = new PrintWriter(s.getOutputStream(),true);//          接受从控制台输入的信息            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) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63

三:全双工

Myclient3.java

package com.test3;//Myclient3.javaimport java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;import java.net.UnknownHostException;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;public class MyClient3 extends JFrame implements ActionListener {    JTextArea jta = null;    JTextField jtf = null;    JScrollPane jsp = null;    JButton jb = null;    JPanel jp1 = null;    PrintWriter pw = null;    public static void main(String[] args) {        MyClient3 my = new MyClient3();    }    public MyClient3() {        jta = new JTextArea();        jsp = new JScrollPane(jta);        jtf = new JTextField(20);        jb = new JButton("发送");        jb.addActionListener(this);        jp1 = new JPanel();        jp1.add(jtf);        jp1.add(jb);        this.add(jsp, "Center");        this.add(jp1, "South");        this.setTitle("QQ简易聊天  客户端");        this.setSize(400, 300);        this.setVisible(true);        try {        //IP为本机IP            Socket s = new Socket("192.168.***.*", 9998);            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 (UnknownHostException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }    @Override    public void actionPerformed(ActionEvent arg0) {        if(arg0.getSource()==jb){            String info = jtf.getText();//          把客户端发送的信息显示到jta;            jta.append("客户端对服务器说: "+info+"\r\n");            pw.println(info);            jtf.setText("");        }    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83

MyServer3.java

/* * 全双工 */package com.test3;//MyServer3.javaimport java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;public class MyServer3 extends JFrame implements ActionListener{    JTextArea jta = null;    JTextField jtf = null;    JScrollPane jsp = null;    JButton jb = null;    JPanel jp1 = null;//  把信息发送给客户端的对象    PrintWriter pw=null;    public static void main(String[] args) {        MyServer3 my = new MyServer3();    }    public MyServer3() {        jta = new JTextArea();        jsp = new JScrollPane(jta);        jtf = new JTextField(20);        jb = new JButton("发送");        jb.addActionListener(this);        jp1 = new JPanel();        jp1.add(jtf);        jp1.add(jb);        this.add(jsp, "Center");        this.add(jp1, "South");        this.setTitle("QQ简易聊天 服务器");        this.setSize(400, 300);        this.setVisible(true);        // 服务器监听        try {            //服务器监听             ServerSocket ss = new ServerSocket(9998);            Socket s = ss.accept();            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) {            // TODO Auto-generated catch block            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.setText("");        }    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94

test3运行效果图 
1


0 0