上課時,寫用戶端和服務端總是出現不了結果或者報錯或者一直處于運作中,今天看了視訊重新寫了一下,運作很順利。用戶端和服務端,在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();
}
}
運作結果:(先運作服務端,再運作用戶端)
服務端:
用戶端: