免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Socket通信


在多臺計(jì)算機(jī)之間實(shí)現(xiàn)通信,最常見的方法有兩種:Socket通信與UDP通信。
Socket是一種基于TCP/IP協(xié)議,建立穩(wěn)定連接的點(diǎn)對點(diǎn)通信,它的特點(diǎn)是安全性高,數(shù)據(jù)
不會丟失,但是很占系統(tǒng)資源。
在JAVA中,ServerSocket類和Socket類為我們實(shí)現(xiàn)了Socket通信,建立通信的一般步驟是:
1。建立服務(wù)器
ServerSocket ss = new ServerSocket(端口號);
Socket socket = ss.accept();
這樣,我們就已經(jīng)建立了服務(wù)器,其中accept()方法會阻塞,知道有客戶發(fā)送一個(gè)連接請求,我們可以通過socket.getInputStream()和socket.getOutputStream()來獲得輸入輸出流,如調(diào)用socket.getInputStream()獲得一個(gè)輸入流,實(shí)際上這個(gè)流就是連接對方的一個(gè)輸出流,流的操作與文件流操作相同,我們可以用操作文件的方法來操作它們。
2。建立客戶端
Socket socket = new Socket(主機(jī)名,端口號)
客戶端只需這一句代碼就可以與服務(wù)器取得連接,這里的主機(jī)名應(yīng)為服務(wù)器的IP地址,端口號是服務(wù)器用來監(jiān)聽該程序的端口,同樣可以通過socket.getInputStream()和socket.getOutputStream()來獲得輸入輸出流。在以上程序中,已經(jīng)實(shí)現(xiàn)了一個(gè)最簡單的客戶端和服務(wù)器的通信。但是,還有一些問題。
首先,這個(gè)通信只執(zhí)行一次,程序就將結(jié)束。因?yàn)槲覀冎蛔x了一次輸入流,如果想要建立客戶與服務(wù)器之間的穩(wěn)定的會話,就要用到多線程:
Thread thread = new Thread(new Sender());
thread.start();

InputStream input =socket.getInputStream();
BufferedReader br = new BufferedReader(newInputStreamReader(input));
while(true){
   br.readLine();
}
其中,Sender是一個(gè)實(shí)現(xiàn)了Runnable接口的類,用它來專門負(fù)責(zé)發(fā)送數(shù)據(jù),主線程只需要不聽地接受數(shù)據(jù)就行。Sender類中的run()方法應(yīng)該具有以下代碼:
PrintWriter pw = new PrintWriter(socket.getOutputStream());
while(true){
   pw.println(數(shù)據(jù));
}
即使按上面的方式做了,程序還是有問題,因?yàn)樗荒茉谝粋€(gè)時(shí)間內(nèi)為一個(gè)客戶服務(wù),不能同時(shí)為多個(gè)客戶服務(wù),如多要想同時(shí)為多個(gè)客戶服務(wù),服務(wù)器應(yīng)具有類似以下的代碼:
ServerSocker ss = new ServerSocker(端口號);
socket = null;
while(true){
    socket =ss.accept();
    Threadthread1 = new Thread(new Sender());
   thread1.start();
    Threadthread2 = new Thread(new Receiver());
   thread2.start();
}
在這里,新開啟了2個(gè)線程分別負(fù)責(zé)接收和發(fā)送。Receiver是一個(gè)與Sender非常相似的類,它主要用來接收數(shù)據(jù)。在客戶端,我們同樣應(yīng)開啟2個(gè)線程:
Socket socket = new Socket(服務(wù)器IP,端口號);
Sender sender = new Sender(socket);
Thread thread1 = new Thread(sender);
thread1.start();
 
Receiver receiver = new Receiver(socket);
Thread thread2 = new Thread(receiver);
thread2.start();

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
淺出Java Socket 編程
利用Socket進(jìn)行Java網(wǎng)絡(luò)編程
初學(xué)者第70節(jié)網(wǎng)絡(luò)編程-Socket(一)
java socket 實(shí)現(xiàn)服務(wù)端與客戶端
java socket編程指南
Android 的網(wǎng)絡(luò)編程
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服