您的位置:首页 > 理论基础 > 计算机网络

java网络编程Socket

2016-09-30 08:40 337 查看
客户机代码:

package sunxu.util;

import java.awt.BorderLayout;

import java.awt.Dimension;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.BufferedReader;

import java.io.DataInputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.net.Socket;

import java.net.UnknownHostException;

import javax.swing.BorderFactory;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

import javax.swing.JTextField;

 

public class ClientSocketFrame extends JFrame  {

    /**

     *

     */

    private static final long serialVersionUID = 1L;

    private PrintWriter writer; // 声明PrintWriter类对象

    private BufferedReader reader; // 声明BufferedReader对象

    private Socket socket; // 声明Socket对象

    JTextArea ta_info; // 创建JtextArea对象

    JButton button1 = new JButton("Connect");

    private String sendIp;

    private int sendPort=4000;

    

    

    private void getIp(){

        try {

            InetAddress inetAddr = InetAddress.getLocalHost();// 创建本地主机的InetAddress对象

            sendIp= inetAddr.getHostAddress();// 获得本地主机的IP地

        } catch (UnknownHostException e1) {

            e1.printStackTrace();

        }

    }

    private void connect() { // 连接套接字方法

        ta_info.append("Connect to server…\n"); // 文本域中信息信息

        try { // 捕捉异常

            getIp();

             socket = new Socket(sendIp,sendPort); // 实例化Socket对象

            while (true) {

                writer = new PrintWriter(socket.getOutputStream(), true);

                reader = new BufferedReader(new InputStreamReader(socket

                        .getInputStream())); // 实例化BufferedReader对象

                getServerInfo();

            }

        } catch (Exception e) {

            e.printStackTrace(); // 输出异常信息

        }

    }

    

    public static void main(String[] args) { // 主方法

          ClientSocketFrame clien = new ClientSocketFrame(); // 创建本例对象

          clien.setVisible(true); // 将窗体显示

          clien.connect(); // 调用连接方法

    }

    

    private void getServerInfo() {

        try {

            while (true) {

                if (reader != null) {

                    String line = reader.readLine();// 读取服务器发送的信息

                    if (line != null)

                        ta_info.append("接收到服务器发送的信息:" + line + "\n"); // 显示服务器端发送的信息

                }

            }

        } catch (Exception e) {

            e.printStackTrace();

        } finally {

            try {

                if (reader != null) {

                    reader.close();// 关闭流

                }

                if (socket != null) {

                    socket.close(); // 关闭套接字

                }

            } catch (IOException e) {

                e.printStackTrace();

            }

        }

    }

    

    /**

     * Create the frame

     */

    public ClientSocketFrame() {

        super();

        setTitle("客户端");

        setBounds(100, 100, 361, 257);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        final JPanel panel = new JPanel();

        getContentPane().add(panel, BorderLayout.NORTH);

        

        panel.setBorder(BorderFactory.createTitledBorder("客户机设置:"));

        

        final JLabel label = new JLabel();

        label.setText("Server IP:");

        panel.add(label);

        JTextField tf_sen= new JTextField();

        tf_sen.setPreferredSize(new Dimension(50, 25));

        getIp();

        tf_sen.setText(sendIp);

        panel.add(tf_sen);

        

        final JLabel label1 = new JLabel();

        label1.setText("Server Port:");

        panel.add(label1);

        JTextField tf_Port = new JTextField();

        tf_Port.setPreferredSize(new Dimension(50, 25));

        tf_Port.setText(sendPort+"");

        panel.add(tf_Port);

        

        final JButton button1 = new JButton("Connect");

        

        button1.addActionListener(new ActionListener() {

            public void actionPerformed(final ActionEvent e) {

                ta_info.append("Client connected…\n");

            }

        });

        panel.add(button1);

        final JPanel panel_1 = new JPanel();

        getContentPane().add(panel_1, BorderLayout.SOUTH);

        final JLabel label_1 = new JLabel();

        label_1.setText("Say:");

        panel_1.add(label_1);

        

        JTextField tf_send = new JTextField();

        tf_send.setPreferredSize(new Dimension(220, 25));

        panel_1.add(tf_send);

        final JButton button = new JButton();

        button.addActionListener(new ActionListener() {

            public void actionPerformed(final ActionEvent e) {

                writer.println(tf_send.getText()); // 将文本框中信息写入流

                ta_info.append("客户端发送的信息:" + tf_send.getText()

                        + "\n"); // 将文本框中信息显示在文本域中

                tf_send.setText(""); // 将文本框清空

            }

        });

        button.setText("Say");

        panel_1.add(button);

        final JScrollPane scrollPane = new JScrollPane();

        getContentPane().add(scrollPane, BorderLayout.CENTER);

        ta_info = new JTextArea();

        scrollPane.setViewportView(ta_info);

        //

        

    }

    

    

}

服务器代码;

package sunxu.util;

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Dimension;

import java.awt.Font;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.*;

import java.net.*;

import javax.swing.BorderFactory;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

import javax.swing.JTextField;

public class ServerSocketFrame extends JFrame {

    /**

     *

     */

    private static final long serialVersionUID = 1L;

    private JTextArea ta_info;

    private PrintWriter writer; // 声明PrintWriter类对象

    private BufferedReader reader; // 声明BufferedReader对象

    private ServerSocket server; // 声明ServerSocket对象

    private Socket socket; // 声明Socket对象socket

    private int sendPort=4000;

    

    public void getServer() {

        try {

            server = new ServerSocket(sendPort); // 实例化Socket对象

            while (true) { // 如果套接字是连接状态

                socket = server.accept(); // 实例化Socket对象

                reader = new BufferedReader(new InputStreamReader(socket

                        .getInputStream())); // 实例化BufferedReader对象

                writer = new PrintWriter(socket.getOutputStream(), true);

                getClientInfo(); // 调用getClientInfo()方法

            }

        } catch (Exception e) {

            e.printStackTrace(); // 输出异常信息

        }

    }

    

    private void getClientInfo() {

        try {

            while (true) {

                String line = reader.readLine();// 读取客户端发送的信息

                if (line != null)

                    ta_info.append("接收到客户机发送的信息:" + line + "\n"); // 显示客户端发送的信息

            }

        } catch (Exception e) {

            ta_info.append("客户端已退出。\n"); // 输出异常信息

        } finally {

            try {

                if (reader != null) {

                    reader.close();// 关闭流

                }

                if (socket != null) {

                    socket.close(); // 关闭套接字

                }

            } catch (IOException e) {

                e.printStackTrace();

            }

        }

    }

    

    public static void main(String[] args) { // 主方法

        ServerSocketFrame frame = new ServerSocketFrame(); // 创建本类对象

        frame.setVisible(true);

        frame.getServer(); // 调用方法

    }

    

    public ServerSocketFrame() {

        super();

        setTitle("服务器端程序");

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        setBounds(100, 100, 379, 260);

        

        final JScrollPane scrollPane = new JScrollPane();

        getContentPane().add(scrollPane, BorderLayout.CENTER);

        

        ta_info = new JTextArea();

        scrollPane.setViewportView(ta_info);

        

        final JPanel panel = new JPanel();

        getContentPane().add(panel, BorderLayout.SOUTH);

        

        final JLabel label = new JLabel();

        label.setText("Say:");

        panel.add(label);

        

        JTextField tf_send = new JTextField();

        tf_send.setPreferredSize(new Dimension(150, 25));

        panel.add(tf_send);

        final JButton button = new JButton();

        button.addActionListener(new ActionListener() {

            public void actionPerformed(final ActionEvent e) {

                writer.println(tf_send.getText()); // 将文本框中信息写入流

                ta_info.append("服务器发送的信息是:" + tf_send.getText() + "\n"); // 将文本框中信息显示在文本域中

                tf_send.setText(""); // 将文本框清空

            }

        });

        button.setText("Say:");

        panel.add(button);

        final JPanel panel_1 = new JPanel();

        getContentPane().add(panel_1, BorderLayout.NORTH);

        panel_1.setBorder(BorderFactory.createTitledBorder("服务器设置:"));

        final JLabel label_1 = new JLabel();

        label_1.setText("Port:");

        JTextField tf_sen= new JTextField();

        tf_sen.setPreferredSize(new Dimension(220, 25));

        tf_sen.setText(sendPort+"");

        panel_1.add(label_1);

        panel_1.add(tf_sen);

        

        final JButton button1 = new JButton("Strat");

        

        button1.addActionListener(new ActionListener() {

            public void actionPerformed(final ActionEvent e) {

                   ta_info.append("Server starting…"+"\n");

                   ta_info.append("Client connected…"+"\n");

            }

        });

        panel_1.add(button1);

        

    }

}

这是运行结果



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  网络编程 socket java