Java TCP網路編程 簡單一實例

來源:互聯網
上載者:User

標籤:java-tcp   tcp網路編程   tcp通訊   socket   


  先啟動 Server 端,進入一個死迴圈以便一直監聽某連接埠是否有串連請求。然後運行 Client 端,用戶端發出串連請求,服務端監聽到這次請求後向用戶端發回接受訊息,串連建立,啟動一個線程去處理這次請求,然後繼續死迴圈監聽其他請求。用戶端輸入字串後按斷行符號鍵,向伺服器發送資料。伺服器讀取資料後回複用戶端資料。這次請求處理完畢,啟動的線程消亡。如果用戶端接收到 “OK” 之外的返回資料,會再次發送串連請求並發送資料,伺服器會為這次串連再次啟動一個線程來進行響應。。。直到當用戶端接收到的返回資料為 “OK” 時,用戶端退出。
  

服務端代碼

import java.io.BufferedReader;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.InputStreamReader;import java.net.ServerSocket;import java.net.Socket;public class TCPServer {    public static final int PORT = 12345;// 監聽的連接埠號碼    public static void main(String[] args) {        System.out.println("伺服器啟動...\n");        TCPServer server = new TCPServer();        server.init();    }    public void init() {        try {            ServerSocket serverSocket = new ServerSocket(PORT);            while (true) {                // 一旦有堵塞, 則表示伺服器與用戶端獲得了串連                Socket client = serverSocket.accept();                // 處理這次串連                new HandlerThread(client);            }        } catch (Exception e) {            System.out.println("伺服器異常: " + e.getMessage());        }    }    private class HandlerThread implements Runnable {        private Socket socket;        public HandlerThread(Socket client) {            socket = client;            new Thread(this).start();        }        public void run() {            try {                // 讀取用戶端資料                DataInputStream input = new DataInputStream(                        socket.getInputStream());                String clientInputStr = input.readUTF();// 這裡要注意和用戶端輸出資料流的寫方法對應,否則會拋                                                        // EOFException                // 處理用戶端資料                System.out.println("服務端收到:" + clientInputStr);                // 向用戶端回複資訊                DataOutputStream out = new DataOutputStream(                        socket.getOutputStream());                System.out.println("服務端輸入:");                // 發送鍵盤輸入的一行                String s = new BufferedReader(new InputStreamReader(System.in))                        .readLine();                out.writeUTF(s);                out.close();                input.close();            } catch (Exception e) {                System.out.println("伺服器 run 異常: " + e.getMessage());            } finally {                if (socket != null) {                    try {                        socket.close();                    } catch (Exception e) {                        socket = null;                        System.out.println("服務端 finally 異常:" + e.getMessage());                    }                }            }        }    }}

用戶端代碼

import java.io.BufferedReader;  import java.io.DataInputStream;  import java.io.DataOutputStream;  import java.io.IOException;  import java.io.InputStreamReader;  import java.net.Socket;  public class TCPClient {      public static final String IP_ADDR = "localhost";//伺服器位址       public static final int PORT = 12345;//伺服器連接埠號碼        public static void main(String[] args) {            System.out.println("用戶端啟動...");            System.out.println("當接收到伺服器端字元為 \"OK\" 的時候, 用戶端將終止\n");           while (true) {                Socket socket = null;              try {                  //建立一個流通訊端並將其串連到指定主機上的指定連接埠號碼                  socket = new Socket(IP_ADDR, PORT);                    //讀取伺服器端資料                    DataInputStream input = new DataInputStream(socket.getInputStream());                    //向伺服器端發送資料                    DataOutputStream out = new DataOutputStream(socket.getOutputStream());                    System.out.println("用戶端輸入: ");                    String str = new BufferedReader(new InputStreamReader(System.in)).readLine();                    out.writeUTF(str);                    String ret = input.readUTF();                     System.out.println("用戶端接收: " + ret);                    // 如接收到 "OK" 則中斷連線                    if ("OK".equals(ret)) {                        System.out.println("用戶端將關閉串連");                        Thread.sleep(500);                        break;                    }                    out.close();                  input.close();              } catch (Exception e) {                  System.out.println("用戶端異常:" + e.getMessage());               } finally {                  if (socket != null) {                      try {                          socket.close();                      } catch (IOException e) {                          socket = null;                           System.out.println("用戶端 finally 異常:" + e.getMessage());                       }                  }              }          }        }    }    

測試結果

Java TCP網路編程 簡單一實例

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.