Java网络编程之Socket通信

提供一个可以Java的Socket通信实例,运行时先启动服务端,再启动客户端


服务端代码如下:


//服务端
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import 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.JSplitPane;
import javax.swing.JTextArea;
public class Server{
    private PrintWriter pw;
    private JFrame frame;
    private JPanel pane_buttom;
    private JSplitPane pane_center;
    //显示内容的文本框,输入内容的文本框,发送内容按钮
    private JScrollPane pane_showWindow;
    private JScrollPane pane_inputWindow;
    private JTextArea area_showWindow;
    private JTextArea area_inputWindow;
    private JButton btn_send;
    private Dimension dimension;//用于设置area_showWindow可拖拉的大小
    //初始化
    public Server() {
        frame = new JFrame();
        pane_buttom = new JPanel();
        pane_showWindow = new JScrollPane();
        pane_inputWindow = new JScrollPane();
        area_showWindow = new JTextArea();
        area_inputWindow = new JTextArea();
        pane_center = new JSplitPane(JSplitPane.VERTICAL_SPLIT, false, pane_showWindow, pane_inputWindow);
        btn_send = new JButton("发送");
        dimension = new Dimension(50, 300);
    }
    //调用方法显示窗口
    public void showFrame(){
        initFrame();
        initChatTextArea();
        initButton();
        btn_send();
        socket();
    }
    //主窗体
    public void initFrame(){
        frame.setTitle("服务端逗逼A");
        int width = (int)Toolkit.getDefaultToolkit().getScreenSize().getWidth();
        int height = (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight();
        frame.setBounds(width / 2, height / 2, 400, 450);
        frame.setVisible(true);
    }
    //内容显示文本框和输入内容文本框
    private void initChatTextArea(){
        //取得视图焦点
        pane_showWindow.getViewport().add(area_showWindow);
        pane_inputWindow.getViewport().add(area_inputWindow);
        //将显示文本域设置为不可编辑
        area_showWindow.setEditable(false);
        //设置显示文本域可拖拉的大小 
        pane_showWindow.setMinimumSize(dimension);
        frame.add(pane_center, BorderLayout.CENTER);
    }
    //发送文件,发送内容按钮
    public void initButton(){
        pane_buttom.add(btn_send);
        frame.add(pane_buttom, BorderLayout.SOUTH);
    }
    private void btn_send(){
        btn_send.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String info = area_inputWindow.getText();
                area_showWindow.append("服务端逗逼A:"+info+"\r\n");
                pw.println(info);
                area_inputWindow.setText("");
            }
        });
    }
    private void socket(){
        ServerSocket ss;
        try {
            ss = new ServerSocket(9988);
            //等待连接 客户端
            Socket s=ss.accept();
            InputStreamReader isr=new InputStreamReader(s.getInputStream());
            BufferedReader br=new BufferedReader(isr);
            //PrintWriter必须和socket有密切的关系
            pw=new PrintWriter(s.getOutputStream(),true);
            //读取从客户端法发来的信息
            while(true) {
                //读取从客户端发来的信息
                String info=br.readLine();
                //在文本栏里显示
                area_showWindow.append("客户端逗逼B:"+info+"\r\n");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        Server chat = new Server();
        chat.showFrame();
    }
}

客户端代码如下:


//客户端
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import 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.JSplitPane;
import javax.swing.JTextArea;
public class Sclient{
    private PrintWriter pw;
    private JFrame frame;
    private JPanel pane_buttom;
    private JSplitPane pane_center;
    //显示内容的文本框,输入内容的文本框,发送内容按钮
    private JScrollPane pane_showWindow;
    private JScrollPane pane_inputWindow;
    private JTextArea area_showWindow;
    private JTextArea area_inputWindow;
    private JButton btn_send;
    private Dimension dimension;//用于设置area_showWindow可拖拉的大小
    //初始化
    public Sclient() {
        frame = new JFrame();
        pane_buttom = new JPanel();
        pane_showWindow = new JScrollPane();
        pane_inputWindow = new JScrollPane();
        area_showWindow = new JTextArea();
        area_inputWindow = new JTextArea();
        pane_center = new JSplitPane(JSplitPane.VERTICAL_SPLIT, false, pane_showWindow, pane_inputWindow);
        btn_send = new JButton("发送");
        dimension = new Dimension(50, 300);
    }
    //调用方法显示窗口
    public void showFrame(){
        initFrame();
        initChatTextArea();
        initButton();
        btn_send();
        socket();
    }
    //主窗体
    public void initFrame(){
        frame.setTitle("客户端逗逼B");
        int width = (int)Toolkit.getDefaultToolkit().getScreenSize().getWidth();
        int height = (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight();
        frame.setBounds(width / 2, height / 2, 400, 450);
        frame.setVisible(true);
    }
    //内容显示文本框和输入内容文本框
    private void initChatTextArea(){
        //取得视图焦点
        pane_showWindow.getViewport().add(area_showWindow);
        pane_inputWindow.getViewport().add(area_inputWindow);
        //将显示文本域设置为不可编辑
        area_showWindow.setEditable(false);
        //设置显示文本域可拖拉的大小 
        pane_showWindow.setMinimumSize(dimension);
        frame.add(pane_center, BorderLayout.CENTER);
    }
    //发送文件,发送内容按钮
    public void initButton(){
        pane_buttom.add(btn_send);
        frame.add(pane_buttom, BorderLayout.SOUTH);
    }
    private void btn_send(){
        btn_send.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String info = area_inputWindow.getText();
                area_showWindow.append("客户端逗逼B: "+info+"\r\n");
                pw.println(info);
                area_inputWindow.setText("");
            }
        });
    }
    private void socket(){
        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();
                area_showWindow.append("服务端逗逼A: "+info+"\r\n");
            }
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        Sclient chat = new Sclient();
        chat.showFrame();
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值