Java tcp服務端與客戶端簡單案例
阿新 • • 發佈:2021-08-06
服務段
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; public class Main { private BufferedReader reader;//流 private ServerSocket server;// private Socket socket;//套接字 void getServer(){//此方法完成服務端的各種必要連結try { server = new ServerSocket(8997);//例項化Socket物件,並給他個8997埠 System.out.println("伺服器套接字建立成功"); while (true){ System.out.println("等待客戶端連線"); socket = server.accept(); reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));//例項化BufferedReader物件 getClientMessage();//呼叫getClientMessage方法 } }catch (Exception e){ e.printStackTrace(); } } private void getClientMessage(){//此方法持續收聽客戶端資訊 try { while (true){ System.out.println("客戶機:" + reader.readLine());//獲取客戶端資訊 } }catch (Exception e){ e.printStackTrace(); } try { if (reader != null){ reader.close();//關閉流 } if (socket != null){ socket.close();//關閉套接字 } }catch (IOException e){ e.printStackTrace(); } } public static void main(String[] args) { // write your code here Main ma = new Main(); ma.getServer(); } }
客戶端
package com.company; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.PrintWriter; import java.net.Socket; public class users extends JFrame { private PrintWriter writer; Socket socket;//建立位元組套物件 private JTextArea ta = new JTextArea(); private JTextField tf = new JTextField(); Container cc; public users(String title){//設定jframe窗體,不是特別重要 super(title); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); cc = this.getContentPane(); final JScrollPane scrollPane = new JScrollPane(); getContentPane().add(scrollPane,BorderLayout.CENTER); scrollPane.setViewportView(ta); cc.add(tf,"South"); tf.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { writer.println(tf.getText());//寫入流,伺服器那邊是讀取流 ta.append(tf.getText() + "\n");//把文字框資訊寫在文字域zon ta.setSelectionEnd(ta.getText().length()); tf.setText(""); } }); } private void connect(){//連線服務端 ta.append("嘗試連結\n"); try { socket = new Socket("127.0.0.1",8997);//連線本地伺服器,並指定與伺服器相同的埠 writer = new PrintWriter(socket.getOutputStream(),true);//列印內容到控制檯 ta.append("完成連線\n"); }catch (Exception e){ e.printStackTrace(); } } public static void main(String[] args) { users mm = new users("客戶端"); mm.setSize(400,200); mm.setVisible(true); mm.connect(); } }