黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專(zhuān)注Java教育14年 全國(guó)咨詢(xún)/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) 學(xué)習(xí)攻略 Java中怎么利用socket進(jìn)行網(wǎng)絡(luò)編程

Java中怎么利用socket進(jìn)行網(wǎng)絡(luò)編程

更新時(shí)間:2020-08-13 16:56:39 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2160次

Socket是網(wǎng)絡(luò)上運(yùn)行的兩個(gè)程序間雙向通訊的一端,它既可以接受請(qǐng)求,也可以發(fā)送請(qǐng)求,利用它可以較為方便的編寫(xiě)網(wǎng)絡(luò)上的數(shù)據(jù)的傳遞。在java中,有專(zhuān)門(mén)的socket類(lèi)來(lái)處理用戶(hù)的請(qǐng)求和響應(yīng)。利用SOCKET類(lèi)的方法,就可以實(shí)現(xiàn)兩臺(tái)計(jì)算機(jī)之間的通訊。這里就介紹一下在JAVA中如何利用socket進(jìn)行網(wǎng)絡(luò)編程。

java socket網(wǎng)絡(luò)編程

在Java中Socket可以理解為客戶(hù)端或者服務(wù)器端的一個(gè)特殊的對(duì)象,這個(gè)對(duì)象有兩個(gè)關(guān)鍵的方法,一個(gè)是getInputStream方法,另一個(gè)是getOutputStream方法。getInputStream方法可以得到一個(gè)輸入流,客戶(hù)端的Socket對(duì)象上的getInputStream方法得到的輸入流其實(shí)就是從服務(wù)器端發(fā)回的數(shù)據(jù)流。GetOutputStream方法得到一個(gè)輸出流,客戶(hù)端Socket對(duì)象上的getOutputStream方法返回的輸出流就是將要發(fā)送到服務(wù)器端的數(shù)據(jù)流,(其實(shí)是一個(gè)緩沖區(qū),暫時(shí)存儲(chǔ)將要發(fā)送過(guò)去的數(shù)據(jù))。

程序可以對(duì)這些數(shù)據(jù)流根據(jù)需要進(jìn)行進(jìn)一步的封裝。本文的例子就對(duì)這些數(shù)據(jù)流進(jìn)行了一定的封裝(關(guān)于封裝可以參考Java中流的實(shí)現(xiàn)部分)。

一、建立服務(wù)器類(lèi)

Java中有一個(gè)專(zhuān)門(mén)用來(lái)建立Socket服務(wù)器的類(lèi),名叫ServerSocket,可以用服務(wù)器需要使用的端口號(hào)作為參數(shù)來(lái)創(chuàng)建服務(wù)器對(duì)象。

ServerSocket server=new ServerSocket(9998)

這條語(yǔ)句創(chuàng)建了一個(gè)服務(wù)器對(duì)象,這個(gè)服務(wù)器使用9998號(hào)端口。當(dāng)一個(gè)客戶(hù)端程序建立一個(gè)Socket連接,所連接的端口號(hào)為9998時(shí),服務(wù)器對(duì)象server便響應(yīng)這個(gè)連接,并且server.accept()方法會(huì)創(chuàng)建一個(gè)Socket對(duì)象。服務(wù)器端便可以利用這個(gè)Socket對(duì)象與客戶(hù)進(jìn)行通訊。

Socket incoming=server.accept()

進(jìn)而得到輸入流和輸出流,并進(jìn)行封裝

BufferedReader in=new BufferedReader(new InputStreamReader(incoming.getInputStream()));
PrintWriter out=new PrintWriter(incoming.getOutputStream(),true);

隨后,就可以使用in.readLine()方法得到客戶(hù)端的輸入,也可以使用out.println()方法向客戶(hù)端發(fā)送數(shù)據(jù)。從而可以根據(jù)程序的需要對(duì)客戶(hù)端的不同請(qǐng)求進(jìn)行回應(yīng)。

在所有通訊結(jié)束以后應(yīng)該關(guān)閉這兩個(gè)數(shù)據(jù)流,關(guān)閉的順序是先關(guān)閉輸出流,再關(guān)閉輸入流,即使用:

out.close();
in.close();

二、建立客戶(hù)端代碼

相比服務(wù)器端,客戶(hù)端要簡(jiǎn)單一些,客戶(hù)端只需用服務(wù)器所在機(jī)器的ip以及服務(wù)器的端口作為參數(shù)創(chuàng)建一個(gè)Socket對(duì)象。得到這個(gè)對(duì)象后,就可以用"建立服務(wù)器"部分介紹的方法實(shí)現(xiàn)數(shù)據(jù)的輸入和輸出。

Socket socket=new Socket("168.160.12.42",9998);
in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
out=new PrintWriter(socket.getOutputStream(),true);

以上的程序代碼建立了一個(gè)Socket對(duì)象,這個(gè)對(duì)象連接到ip地址為168.160.12.42的主機(jī)上、端口為9998的服務(wù)器對(duì)象。并且建立了輸入流和輸出流,分別對(duì)應(yīng)服務(wù)器的輸出和客戶(hù)端的寫(xiě)入。

三、建立用戶(hù)界面

讀者可以根據(jù)自己的喜好建立自己的用戶(hù)界面,這不是本文的重點(diǎn)。

經(jīng)過(guò)以上三個(gè)步驟,就可以建立一個(gè)比較簡(jiǎn)單的對(duì)話程序。但是,為了使這個(gè)程序更加完善,應(yīng)進(jìn)行以下幾個(gè)改進(jìn):

一、現(xiàn)在服務(wù)器只能服務(wù)一個(gè)客戶(hù),也就是單線程的??梢詫⑺倪M(jìn)為多線程服務(wù)器。

try???
{?file://建立服務(wù)器????
 ServerSocket?server?=?new?ServerSocket(9998);????
 int?i=1;????
 for(;;)????
 {????
Socket?incoming?=?server.accept();????
new?ServerThread(incoming,i).start();????
i++;????
 }????
}catch?(IOException?ex){?ex.printStackTrace();?}

循環(huán)檢測(cè)是否有客戶(hù)連接到服務(wù)器上,如果有,則創(chuàng)建一個(gè)線程來(lái)服務(wù)這個(gè)客戶(hù),這個(gè)線程的名稱(chēng)是ServerThread,這個(gè)類(lèi)擴(kuò)展了Thread類(lèi),它的編寫(xiě)方法與前述的服務(wù)器的寫(xiě)法相同。

二、為了可以隨時(shí)得到對(duì)方傳送過(guò)來(lái)的消息,可以在服務(wù)器以及客戶(hù)端各建立一個(gè)獨(dú)立的線程來(lái)察看輸入流,如果輸入流中有輸入,則可以即時(shí)顯示出來(lái)。代碼如下:

new?Thread()??
{??
 public?void?run()??
 {??
try?
{ ??
 while(true)??
 {??
checkInput();??
sleep(1000);//每1000毫秒檢測(cè)一次??
 }??
}catch?(InterruptedException?ex)??
 {??
 }catch(IOException?ex)??
 {??
}??
 }??
}.start();

其中的checkInput()方法為:

private?void?checkInput()?throws?IOException??
{??
 String?line;??
 if((line=in.readLine())!=null)?file://檢測(cè)輸入流中是否有新的數(shù)據(jù)??
t.setPartner(line);?file://將數(shù)據(jù)流中的消息顯示出來(lái)??
}

通過(guò)以上改進(jìn),程序就可以比較好的運(yùn)行了。

java socket網(wǎng)絡(luò)編程

以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Java中怎么利用socket進(jìn)行網(wǎng)絡(luò)編程”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢(xún),有專(zhuān)業(yè)老師隨時(shí)為你服務(wù)。

提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 久爱午夜精品免费视频 | 天天干天天干天天天天天天爽 | 青青国产成人久久91 | 手机在线成人精品视频网 | 国产一区二区自拍视频 | 免费人成网站7777视频 | 免费看真人a一级毛片 | 中文有码在线 | 免费性爱视频 | 国产成人在线视频播放 | 午夜高清免费观看视频 | 小毛片在线观看 | 国产又爽又黄又不遮挡视频99 | 日本高清不卡一区久久精品 | 久久久久网站 | 一级毛片免费一级直接观看 | 欧美在线一二三 | 性刺激欧美三级在线现看中文 | 国产香蕉一本大道 | 欧美日本视频一区 | 国产一区二区在线视频 | 特黄特色一级aa毛片免费观看 | 日本成本人三级在线观看2018 | 日韩导航 | 鸥美一级黄色片 | 国内精品免费久久久久妲己 | 你懂的 在线播放 | 特级理论片 | 中文字幕亚洲图片 | 欧美日本一 | 日本黄色三级视频 | 亚洲欧美日韩不卡 | 欧美日韩黄色 | 一个人www免费观看视频 | 中国黄色一级视频 | 中文字幕一精品亚洲无线一区 | a在线免费观看视频 | 欧美日韩免费在线视频 | 国产一在线观看 | 手机日韩 | 黄色小视频在线免费看 |