java socket tcp通訊,多個客戶端連接服務器簡單例子

yxwpx 9年前發布 | 1K 次閱讀 Java

服務器端


import java.net.*;  
import java.io.*;  

public class TCPServer {  

    public TCPServer() throws Exception{
        ServerSocket ss = new ServerSocket(6666);
        while (true) {  
            Socket s = ss.accept();  
            new ServerThread(s).start();

        }
    }
    public static void main(String[] args) throws Exception {  
       new TCPServer();

    }  

    protected class ServerThread extends Thread{
         Socket s;
        public ServerThread(Socket s1){
            s = s1;
        }
        public void run(){
             System.out.println("a client connect!");  
            try{
                DataInputStream dis = new DataInputStream(s.getInputStream());//服務器通過輸入管道接收數據流  
                String str;
                while((str = dis.readUTF()).length() > 0){
                    System.err.println(str);//輸出讀入的數據  
                }

            }
            catch(Exception ex){
                ex.printStackTrace();
            }

        }
    }
}
客戶端



import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.DataOutputStream;
import java.io.OutputStream;
import java.net.Socket;
import javax.swing.JTextField;

public class TCPClientFrame extends JFrame {
    Socket s;
    DataOutputStream dos;
    private JPanel contentPane;
    private JTextField textField;
    private JButton button;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    TCPClientFrame frame = new TCPClientFrame();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public TCPClientFrame() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JButton btnNewButton = new JButton("連接");
        btnNewButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                try{
                    s = new Socket("127.0.0.1", 6666);  
                    OutputStream os = s.getOutputStream();  //得到輸出管道  
                    dos = new DataOutputStream(os);//創建數據傳輸流  
                }
                catch(Exception ex){
                    ex.printStackTrace();
                }
            }
        });
        btnNewButton.setBounds(10, 10, 93, 23);
        contentPane.add(btnNewButton);

        JButton btnNewButton_1 = new JButton("發消息");
        btnNewButton_1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                try{
                     dos.writeUTF(textField.getText());//客戶端傳輸數據  
                     dos.flush();  
                }
                catch(Exception ex){
                    ex.printStackTrace();
                }
            }
        });
        btnNewButton_1.setBounds(141, 10, 93, 23);
        contentPane.add(btnNewButton_1);

        textField = new JTextField();
        textField.setBounds(10, 56, 66, 21);
        contentPane.add(textField);
        textField.setColumns(10);

        button = new JButton("自動發消息");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                try{
                    while(true){
                         dos.writeUTF("======自動發的消息");//客戶端傳輸數據  
                         dos.flush();  
                    }

                }
                catch(Exception ex){
                    ex.printStackTrace();
                }
            }
        });
        button.setBounds(314, 10, 93, 23);
        contentPane.add(button);
    }
}


 本文由用戶 yxwpx 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!