溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java SocketAPI關(guān)鍵代碼怎么寫以及使用介紹

發(fā)布時(shí)間:2021-10-23 17:54:01 來(lái)源:億速云 閱讀:220 作者:柒染 欄目:編程語(yǔ)言

Java SocketAPI關(guān)鍵代碼怎么寫以及使用介紹,針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

Java SocketAPI如何才能夠正常的使用呢?這個(gè)問(wèn)題就需要我們掌握相關(guān)的代碼。所謂socket通常也稱作"套接字",用于描述IP地址和端口,是一個(gè)通信鏈的句柄。應(yīng)用程序通常通過(guò)"套接字"向網(wǎng)絡(luò)發(fā)出請(qǐng)求或者應(yīng)答網(wǎng)絡(luò)請(qǐng)求。

以J2SDK-1.3為例,Java SocketAPI和ServerSocket類庫(kù)位于java.net包中。ServerSocket用于服務(wù)器端, Socket是建立網(wǎng)絡(luò)連接時(shí)使用的。在連接成功時(shí),應(yīng)用程序兩端都會(huì)產(chǎn)生一個(gè)Socket實(shí)例,操作這個(gè)實(shí)例,完成所需的會(huì)話。對(duì)于一個(gè)網(wǎng)絡(luò)連接來(lái)說(shuō), 套接字是平等的,并沒(méi)有差別,不因?yàn)樵诜?wù)器端或在客戶端而產(chǎn)生不同級(jí)別。不管是Socket還是ServerSocket它們的工作都是通過(guò) SocketImpl類及其子類完成的。

重要的Java SocketAPI:

java.net.Socket繼承于java.lang.Object,有八個(gè)構(gòu)造器,其方法并不多,下面介紹使用最頻繁的三個(gè)方法,其它方法大家可以見JDK-1.3文檔。

Accept方法用于產(chǎn)生"阻塞",直到接受到一個(gè)連接,并且返回一個(gè)客戶端的Socket對(duì)象實(shí)例。"阻塞"是一個(gè)術(shù)語(yǔ),它使程序運(yùn)行暫時(shí)"停留"在這個(gè)地方,直到一個(gè)會(huì)話產(chǎn)生,然后程序繼續(xù);通常"阻塞"是由循環(huán)產(chǎn)生的。

getInputStream方法獲得網(wǎng)絡(luò)連接輸入,同時(shí)返回一個(gè)IutputStream對(duì)象實(shí)例,。

getOutputStream方法連接的另一端將得到輸入,同時(shí)返回一個(gè)OutputStream對(duì)象實(shí)例。

注意:其中g(shù)etInputStream和getOutputStream方法均會(huì)產(chǎn)生一個(gè)IOException,它必須被捕獲,因?yàn)樗鼈兎祷氐牧鲗?duì)象,通常都會(huì)被另一個(gè)流對(duì)象使用。

如何開發(fā)一個(gè)Server-Client模型的程序

開發(fā)原理:

服務(wù)器,使用ServerSocket監(jiān)聽指定的端口,端口可以隨意指定(由于1024以下的端口通常屬于保留端口,在一些操作系統(tǒng)中不可以隨意使用,所以建議使用大于1024的端口),等待客戶連接請(qǐng)求,客戶連接后,會(huì)話產(chǎn)生;在完成會(huì)話后,關(guān)閉連接。

客戶端,使用Socket對(duì)網(wǎng)絡(luò)上某一個(gè)服務(wù)器的某一個(gè)端口發(fā)出連接請(qǐng)求,一旦連接成功,打開會(huì)話;會(huì)話完成后,關(guān)閉Socket??蛻舳瞬恍枰付ù蜷_的端口,通常臨時(shí)的、動(dòng)態(tài)的分配一個(gè)1024以上的端口。

{建立服務(wù)器}

  1. import java.net.*;  

  2. import java.io.*;  

  3. public class Server  

  4. {  

  5. private ServerSocket ss;  

  6. private Socket socket;  

  7. private BufferedReader in;  

  8. private PrintWriter out;  

  9. public Server()  

  10. {  

  11. try  

  12. {  

  13. ss = new ServerSocket(10000);  

  14.  

  15. while (true)  

  16. {  

  17. socket = ss.accept();  

  18. in = new BufferedReader(new InputStreamReader
    (socket.getInputStream()));  

  19. out = new PrintWriter(socket.getOutputStream(),true);  

  20. String line = in.readLine();  

  21. out.println("you input is :" + line);  

  22. out.close();  

  23. in.close();  

  24. socket.close();  

  25. }  

  26. ss.close();  

  27. }  

  28. catch (IOException e)  

  29. {}  

  30. }  

  31. public static void main(String[] args)  

  32. {  

  33. new Server();  

  34. }  

  35. }  

這個(gè)程序建立了一個(gè)服務(wù)器,它一直監(jiān)聽10000端口,等待用戶連接。在建立連接后給客戶端返回一段信息,然后結(jié)束會(huì)話。這個(gè)程序一次只能接受一個(gè)客戶連接。

{建立客戶端}

  1. import java.io.*;  

  2. import java.net.*;  

  3. public class Client  

  4. {  

  5. Socket socket;  

  6. BufferedReader in;  

  7. PrintWriter out;  

  8. public Client()  

  9. {  

  10. try  

  11. {  

  12. socket = new Socket("xxx.xxx.xxx.xxx", 10000);  

  13. in = new BufferedReader(new InputStreamReader
    (socket.getInputStream()));  

  14. out = new PrintWriter(socket.getOutputStream(),true);  

  15. BufferedReader line = new BufferedReader(new 
    InputStreamReader(System.in));  

  16. out.println(line.readLine());  

  17. line.close();  

  18. out.close();  

  19. in.close();  

  20. socket.close();  

  21. }  

  22. catch (IOException e)  

  23. {}  

  24. }  

  25. public static void main(String[] args)  

  26. {  

  27. new Client();  

  28. }  

  29. }  

這個(gè)客戶端連接到地址為xxx.xxx.xxx.xxx的服務(wù)器,端口為10000,并從鍵盤輸入一行信息,發(fā)送到服務(wù)器,然后接受服務(wù)器的返回信息,結(jié)束會(huì)話。

關(guān)于Java SocketAPI關(guān)鍵代碼怎么寫以及使用介紹問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI