1. 程式人生 > 其它 >Java基礎-網路程式設計Server-Client通訊

Java基礎-網路程式設計Server-Client通訊

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的輸出流物件。