您好,登錄后才能下訂單哦!
上節(jié)回顧:在學(xué)習(xí)了Socket在建立客戶端和服務(wù)器單項通訊中,分別創(chuàng)建獨立的Socket,并通過Socket的屬性。
那么如何將兩個Socket進(jìn)行連接,從而達(dá)到客戶端和服務(wù)器之間建立輸入輸出流進(jìn)行通信呢?在上節(jié)中我們已經(jīng)講到,TCP/IP套接字是最可靠的雙向流協(xié)議,使用TCP/IP可以發(fā)送任意數(shù)量的數(shù)據(jù)。如果發(fā)送方和接收方計算機(jī)確定好端口,他們就可以通信了,其中的端口用套接字表示。
【示例1】客戶端與服務(wù)器端雙向交流的Socket之服務(wù)器端
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) throws Exception { ServerSocket server=new ServerSocket(8888); Socket socket=server.accept(); BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream())); BufferedWriter out=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); while(true){ String str=in.readLine(); System.out.println("客戶端說:"+str); String str2 = ""; str2 = br.readLine(); //讀到\n為止,因此一定要輸入換行符! out.write(str2+"\n"); out.flush(); if(str.equals("end")) break; }
in.close(); out.close(); socket.close(); } } |
【示例2】客戶端與服務(wù)器端雙向交流的Socket之客戶端
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException;
public class Client { static Socket server;
public static void main(String[] args) { try { server = new Socket(InetAddress.getLocalHost(), 8888); BufferedReader in = new BufferedReader(new InputStreamReader( server.getInputStream())); BufferedWriter out = new BufferedWriter(new OutputStreamWriter( server.getOutputStream())); BufferedReader wt = new BufferedReader(new InputStreamReader( System.in));
while (true) { String str = wt.readLine(); out.write(str + "\n"); out.flush(); if (str.equals("end")) { break; } System.out.println("服務(wù)器發(fā)說:" + in.readLine()); }
out.close(); in.close(); wt.close(); server.close();
} catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
} } |
學(xué)習(xí)以上程序后,會發(fā)現(xiàn)我們必須按照安排好的順序,服務(wù)器和客戶端一問一答!不夠靈活?。∧敲慈绾斡枚嗑€程來實現(xiàn)更加靈活的雙向通訊呢?下節(jié)我們繼續(xù)~
「全棧Java筆記」是一部能幫大家從零到一成長為全棧Java工程師系列筆記。筆者江湖人稱 Mr. G,10年Java研發(fā)經(jīng)驗,曾在神州數(shù)碼、航天院某所研發(fā)中心從事軟件設(shè)計及研發(fā)工作,從小白逐漸做到工程師、高級工程師、架構(gòu)師。精通Java平臺軟件開發(fā),精通JAVAEE,熟悉各種流行開發(fā)框架。
筆記包含從淺入深的六大部分:
A-Java入門階段
B-數(shù)據(jù)庫從入門到精通
C-手刃移動前端和Web前端
D-J2EE從了解到實戰(zhàn)
E-Java高級框架精解
F-Linux和Hadoop
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。