事實上網絡編程簡單的理解就是兩臺計算機相互通訊數據而已.對於程序員而言,去掌握一種編程接口並使用一種編程模型相對就會顯得簡單的多了.Java SDK提供一些相對簡單的Api來完成這些工作.Java Socket編程就是其中之一.對於Java而言.這些Api存在與java.net 這個包裡面.因此只要導入這個包就可以準備網絡編程了。
Socket是網絡上運行的兩個程序間雙向通訊的一端,它既可以接受請求,也可以發送請求,利用它可以較為方便的編寫網絡上的數據的傳遞。在java中,有專門的socket類來處理用戶的請求和響應。利用SOCKET類的方法,就可以實現兩臺計算機之間的通訊。這裡就介紹一下在JAVA中如何利用socket進行網絡編程。
建立服務器類
Java中有一個專門用來建立Socket服務器的類,名叫ServerSocket,可以用服務器需要使用的端口號作為參數來創建服務器對象。
ServerSocket server = new ServerSocket(9998)
這條語句創建了一個服務器對象,這個服務器使用9998號端口。當一個客戶端程序建立一個Socket連接,所連接的端口號為9998時,服務器對象server便響應這個連接,並且server.accept()方法會創建一個Socket對象。服務器端便可以利用這個Socket對象與客戶進行通訊。
Socket incoming = server.accept()
進而得到輸入流和輸出流,並進行封裝
BufferedReader in = new BufferedReader(new InputStreamReader(incoming.getInputStream()));
PrintWriter out = new PrintWriter(incoming.getOutputStream(),true);
隨後,就可以使用in.readLine()方法得到客戶端的輸入,也可以使用out.println()方法向客戶端發送數據。從而可以根據程序的需要對客戶端的不同請求進行回應。
在所有通訊結束以後應該關閉這兩個數據流,關閉的順序是先關閉輸出流,再關閉輸入流,即使用:
out.close();
in.close();
客戶端和服務端同時讀和寫
前面已經說了Socket之間是雙向通信的,它既可以接收數據,同時也可以發送數據。
服務端代碼
public class Server {
public static void main(String args[]) throws IOException {
//為了簡單起見,所有的異常信息都往外拋
int port = 8899;
//定義一個ServerSocket監聽在端口8899上
ServerSocket server = new ServerSocket(port);
//server嘗試接收其他Socket的連接請求,server的accept方法是阻塞式的
Socket socket = server.accept();
//跟客戶端建立好連接之後,我們就可以獲取socket的InputStream,並從中讀取客戶端發過來的信息了。
Reader reader = new InputStreamReader(socket.getInputStream());
char chars[] = new char[64];
int len;
StringBuilder sb = new StringBuilder();
while ((len=reader.read(chars)) != -1) {
sb.append(new String(chars, 0, len));
}
System.out.println("from client: " + sb);
//讀完後寫一句
Writer writer = new OutputStreamWriter(socket.getOutputStream());
writer.write("Hello Client.");
writer.flush();
writer.close();
reader.close();
socket.close();
server.close();
}
}
閱讀更多 Java的筆記 的文章