天天看點

java 中Socket 客服端和服務端

上課時,寫用戶端和服務端總是出現不了結果或者報錯或者一直處于運作中,今天看了視訊重新寫了一下,運作很順利。用戶端和服務端,在read()讀取的時候,不要用while的方式,那樣隻會導緻用戶端和服務端都一直在運作。如果想要輸入更多内容,可以把byte數組的長度設定的大一些。

用戶端代碼

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class Client {
    public static void main(String[] args) throws IOException {
        //建立Socket,指定需要連接配接的ip和端口
        Socket socket=new Socket("127.0.0.1",8888);
        OutputStream os = socket.getOutputStream();
        //給伺服器發消息
        os.write("你好,伺服器。很高興第一次通路你!".getBytes());
        //擷取服務端傳回的資訊
        InputStream is = socket.getInputStream();
        byte[] b=new byte[1024];
        int len=is.read(b);
        System.out.println(new String(b,0,len));
        //釋放資源
        is.close();
        socket.close();
    }
}
           

服務端代碼:

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
    public static void main(String[] args) throws IOException {
        //建立端口
        ServerSocket serverSocket=new ServerSocket(8888);
        System.out.println("等待用戶端連接配接.....");
        //等待用戶端接收
        Socket socket = serverSocket.accept();
        //讀取用戶端發出的資訊
        InputStream is = socket.getInputStream();
        byte [] b=new byte[1024];
        int len=is.read(b);
        System.out.println(new String(b,0,len));
        //收到後,給用戶端答複資訊
        OutputStream os = socket.getOutputStream();
        os.write("用戶端,收到了你的資訊,感謝你的通路!".getBytes());
        //釋放資源
        os.close();
        socket.close();
        serverSocket.close();
    }
}
           

運作結果:(先運作服務端,再運作用戶端)

服務端:

java 中Socket 客服端和服務端

用戶端:

java 中Socket 客服端和服務端