Java中利用socket实现简单的服务端与客户端的通信(入门级)
Java編程中,要想要使用網(wǎng)絡(luò)通信,就離不開Socket編程,在此對socket進(jìn)行簡單的介紹。首先聲明,這是一個入門級的介紹,僅僅簡單的實現(xiàn)了客戶端向服務(wù)端發(fā)送數(shù)據(jù),服務(wù)端正常的接收數(shù)據(jù),當(dāng)接收到特定的數(shù)據(jù)時,服務(wù)端和客戶端都關(guān)閉,一個服務(wù)端對應(yīng)一個客戶端,不涉及多線程等內(nèi)容,一切都是最簡單最基礎(chǔ)的知識點。
下面給出的代碼,可以直接拷貝到eclipse中運行, 無需任何更改。
關(guān)于socket和seversocket的原理以及構(gòu)造函數(shù)等一些簡單的介紹,可以查看其他的一些博客,期中寫的比較清晰,我給大家推薦一個[Java]Socket和ServerSocket學(xué)習(xí)筆記?。期中關(guān)于socket的通信原理和需要基本了解的一些構(gòu)造函數(shù),常用函數(shù)等,都進(jìn)行了簡單的介紹。
開發(fā)環(huán)境為eclipse,新建兩個普通的Java工程,一個命名為server_1,作為服務(wù)端,另一個命名為client_1,作為客戶端,完成的功能就是在客戶端的控制臺輸入內(nèi)容后,客戶端將內(nèi)容發(fā)送至服務(wù)端,在服務(wù)端的控制臺可以看到輸入的內(nèi)容,當(dāng)輸入的內(nèi)容為shutdown時,服務(wù)端和客戶端都關(guān)閉通信,通信結(jié)束。
服務(wù)端代碼:
package server_1;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class server_1 { public static void main(String[] args) throws IOException { //將異常全部拋出 ServerSocket server = new ServerSocket(10000); //用serversocket來啟動服務(wù)器,并指定端口號System.out.println("服務(wù)器啟動。。。");Socket socket = server.accept(); //獲取客戶端的socket信息BufferedReader in = null; in = new BufferedReader(new InputStreamReader(socket.getInputStream())); //啟動緩沖區(qū) while (true) { String msg = in.readLine(); // 將客戶端發(fā)送來的信息存儲在msg中 System.out.println(msg); if (msg.equals("shutdown")) { //客戶端如果發(fā)送的是shutdown,就關(guān)閉客戶端break; } }in.close(); //執(zhí)行相應(yīng)的關(guān)閉操作 } }考慮這是一個入門級的程序,所以暫時不考慮各種異常情況,咋mian函數(shù)的后面就講各種異常拋出。建立seversocket,并且指定服務(wù)器的端口號為10000,此時服務(wù)器端開始運行。(端口號盡量取大于1024的數(shù)字,小于1024的一般都是系統(tǒng)程序占用)
然后利用socket實現(xiàn)和客戶端的連接。
in是一個輸入緩沖區(qū),客戶端發(fā)送來的信息就暫時存儲在這個緩沖區(qū)中。
然后用while語句,循環(huán)的監(jiān)聽客戶端發(fā)送過來的數(shù)據(jù),當(dāng)是一般信息時,就講客戶端發(fā)來的內(nèi)同打印到控制臺,如果是“shutdown”,則關(guān)閉服務(wù)器端,此次通信終止。
客戶端程序:
package client_1;import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket;public class client_1 { public static void main(String[] args) throws Exception { System.out.println("客戶端啟動");Socket socket = new Socket("localhost", 10000); //啟動socket,并連接本地主機(jī)的相應(yīng)端口號PrintWriter out = new PrintWriter(socket.getOutputStream()); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));//從控制臺獲取輸入的內(nèi)容 //不斷的獲取輸入的內(nèi)容,并不斷的發(fā)送給服務(wù)器,當(dāng)輸入shutdown時,跳出循環(huán),停止運行while (true) { String msg = reader.readLine(); out.println(msg); out.flush(); if (msg.equals("shutdown")) { break; } } //執(zhí)行相應(yīng)的關(guān)閉操作socket.close();out.close();reader.close();} }同樣也是在main函數(shù)后就拋出所有的異常,不考慮一些比較復(fù)雜的異常情況。
建立socket來準(zhǔn)備進(jìn)行通信,指定服務(wù)端的位置為“l(fā)ocalhost”(也就是本機(jī),也可以使用IP:127.0.0.1),端口號要和服務(wù)器端的端口號對應(yīng),為10000。
建立reader為緩沖區(qū),將控制臺輸入的內(nèi)容先存儲到緩沖區(qū)中。
建立out用來發(fā)送數(shù)據(jù)。
通過while循環(huán)監(jiān)聽控制臺,通過socket將緩沖區(qū)的內(nèi)容發(fā)送到服務(wù)端,如果輸入的是一般結(jié)果,則將內(nèi)容發(fā)送給服務(wù)端,如果輸入的時“shutdown”,則將內(nèi)容發(fā)送后跳出循環(huán), 此次通信結(jié)束。
以上就是關(guān)于socket通信的一個非常簡答的例子。
總結(jié)
以上是生活随笔為你收集整理的Java中利用socket实现简单的服务端与客户端的通信(入门级)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: git与github区别与简介
- 下一篇: Java中利用socket实现简单的服务