Java基礎-網路程式設計Server-Client通訊
阿新 • • 發佈:2022-04-21
package com.hspedu.TestServerClient; import org.junit.Test; import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; public class Server { @Test public void startServer() throws IOException { ServerSocket serverSocket = new ServerSocket(8080); System.out.println("伺服器Server正在監聽8080埠,等待客戶端Client連線..."); Socket socket = serverSocket.accept(); System.out.println("伺服器socket的執行型別:" + socket.getClass()); InputStream inputStream = socket.getInputStream(); byte[] bytes = new byte[1024]; int readData = 0;while ((readData = inputStream.read(bytes)) != -1) { System.out.print(new String(bytes, 0, readData)); } // int readChar = 0; // while ((readChar = inputStream.read()) != -1) { // System.out.print((char) readChar); // } inputStream.close(); socket.close(); serverSocket.close(); } }
1、ServerSocket可以通過多個accept建立多個socket連線,可以和多個客戶端連線,高併發;
2、ServerSocket的accept方法監聽建立對應的埠(8080),阻塞狀態等待client客戶端連線,直至有client客戶端連線繼續執行;
3、建議使用位元組bytes陣列讀取接收客戶端client傳送的資訊,容量最好大於資訊長度,否則容易會出現錯位導致亂碼問題(包括char單位元組讀取);
package com.hspedu.TestServerClient; import org.junit.Test; import java.io.IOException; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; public class Client { @Test public void startClient() throws IOException { Socket socket = new Socket(InetAddress.getLocalHost(), 8080); System.out.println("客戶端socket = " + socket); OutputStream outputStream = socket.getOutputStream(); outputStream.write("客戶端 >>> 伺服器:hello, server".getBytes()); outputStream.close(); socket.close(); System.out.println("客戶端退出。"); } }
1、new Socket(InetAddress.getLocalHost(), 8080)連線本機伺服器的8080埠,返回socket套接字物件;
2、socket套接字物件的getOutputStream獲取客戶端client的輸出流物件。