Java Socket通信(一)之客戶端程序 發(fā)送和接收數(shù)據(jù)
網(wǎng)絡(luò)應(yīng)用分為客戶端和服務(wù)端兩部分,而Socket類是負(fù)責(zé)處理客戶端通信的Java類。通過這個(gè)類可以連接到指定IP或域名的服務(wù)器上,并且可以和服務(wù)器互相發(fā)送和接受數(shù)據(jù)。
對于Socket通信簡述,服務(wù)端往Socket的輸出流里面寫東西,客戶端就可以通過Socket的輸入流讀取對應(yīng)的內(nèi)容。Socket與Socket之間是雙向連通的,所以客戶端也可以往對應(yīng)的Socket輸出流里面寫東西,然后服務(wù)端對應(yīng)的Socket的輸入流就可以讀出對應(yīng)的內(nèi)容。
例1:客戶端的簡略寫法(一)。
Socket client = null; try{ client = new Socket(Ip,Port); String msg="發(fā)送的數(shù)據(jù)內(nèi)容!"; //得到socket讀寫流,向服務(wù)端程序發(fā)送數(shù)據(jù) client.getOutputStream().write(msg.getBytes()); byte[] datas = new byte[2048]; //從服務(wù)端程序接收數(shù)據(jù) client.getInputStream().read(datas); System.out.println(new String(datas)); }catch(Exception e){ e.printStackTrace(); }finally { if (client != null) { try { client.close(); } catch (IOException e) { System.out.println("systemerr:" +e); } } }
例2:客戶端簡略寫法(二)。
try{ client = new Socket(); SocketAddress socketAddress = new InetSocketAddress(Ip,Port); client.connect(socketAddress, 3000); String msg="訪問的服務(wù)器返回內(nèi)容!"; //得到socket讀寫流,向服務(wù)端程序發(fā)送數(shù)據(jù) client.getOutputStream().write(msg.getBytes()); byte[] datas = new byte[2048]; //從服務(wù)端程序接收數(shù)據(jù) client.getInputStream().read(datas); System.out.println(new String(datas)); }catch(Exception e){ e.printStackTrace(); }finally { if (client != null) { try { client.close(); } catch (IOException e) { System.out.println("systemerr:" +e); } } }
例3:客戶端的完整寫法。
try { //1.建立客戶端socket連接,指定服務(wù)器位置及端口 Socket socket =new Socket(Ip,Port); //2.得到socket讀寫流 OutputStream os=socket.getOutputStream(); PrintWriter pw=new PrintWriter(os); //輸入流 InputStream is=socket.getInputStream(); BufferedReader br=new BufferedReader(new InputStreamReader(is)); //3.利用流按照一定的操作,對socket進(jìn)行讀寫操作 String sendInfo="向服務(wù)器發(fā)送的數(shù)據(jù)信息!"; pw.write(sendInfo); pw.flush(); socket.shutdownOutput(); //接收服務(wù)器的相應(yīng) String replyInfo=null; while(!((replyInfo=br.readLine())==null)){ System.out.println("接收服務(wù)器的數(shù)據(jù)信息:"+replyInfo); } //4.關(guān)閉資源 br.close(); is.close(); pw.close(); os.close(); socket.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }
關(guān)于Java Socket通信(一)之客戶端程序 發(fā)送和接收數(shù)據(jù)的相關(guān)知識,小編就給大家介紹到這里,更多信息請登陸腳本之家網(wǎng)站了解更多內(nèi)容!
相關(guān)文章
詳解SpringBoot集成消息隊(duì)列的案例應(yīng)用
Message?Queue又名消息隊(duì)列,是一種異步通訊的中間件??梢岳斫鉃猷]局,發(fā)送者將消息投遞到郵局,然后郵局幫我們發(fā)送給具體的接收者,具體發(fā)送過程和時(shí)間與我們無關(guān)。?消息隊(duì)列是分布式系統(tǒng)中重要的組件,消息隊(duì)列主要解決了應(yīng)用耦合、異步處理、流量削鋒等問題2022-04-04java動態(tài)線程池的簡單實(shí)現(xiàn)思路
本文主要介紹了java?動態(tài)線程池的簡單實(shí)現(xiàn)思路,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06MyBatis批量添加數(shù)據(jù)2種實(shí)現(xiàn)方法
這篇文章主要介紹了MyBatis批量添加數(shù)據(jù)2種實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06SpringBoot超詳細(xì)講解Thymeleaf模板引擎
這篇文章主要分享了Spring Boot整合使用Thymeleaf,Thymeleaf是新一代的Java模板引擎,類似于Velocity、FreeMarker等傳統(tǒng)引擎,關(guān)于其更多相關(guān)內(nèi)容,需要的小伙伴可以參考一下2022-07-07SpringBoot配置MyBatis-Plus實(shí)現(xiàn)增刪查改
本文主要介紹了SpringBoot配置MyBatis-Plus實(shí)現(xiàn)增刪查改,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08Java實(shí)現(xiàn)在Word指定位置插入分頁符
在Word插入分頁符可以在指定段落后插入,也可以在特定文本位置處插入。本文將以Java代碼來操作以上兩種文檔分頁需求,需要的可以參考一下2022-04-04java正則表達(dá)式之Pattern與Matcher類詳解
這篇文章主要給大家介紹了關(guān)于java正則表達(dá)式之Pattern與Matcher類的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09