日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JAVA TCP通信基础篇——对发消息【如何解决输入流假死状态】

發布時間:2025/3/20 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA TCP通信基础篇——对发消息【如何解决输入流假死状态】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么80%的碼農都做不了架構師?>>> ??

TCP(Transmission Control Protocol?傳輸控制協議)是一種面向連接的可靠的基于字節流的傳輸層通信協議.

面向連接:服務器創建一個連接端口,客戶端去連接服務器實現通信。

可靠的:tcp協議是是在連接成功之后才會發送數據,而基于UDP的協議是事先不會征求對方意見,直接將數據傳送出去,因此TCP協議傳輸中,數據更可靠,更安全。

基于字節流:tcp協議中傳遞的信息是以流的形式傳遞的,在java中可通過inputstream來捕獲,通過outputstream發送。

對于接收數據的時候出現假死的狀態:

readLine()函數讀取一行,結尾需要"\n"才能結束,不然會一直卡死在這里,因此大家在用printwriter的時候要print一個"\n",然后把printwriter flush掉。就不會假死了!

這樣:pw.write("fuck you cient");?? ?//send to server
?? ??? ??? pw.write("\n");
?? ??? ??? pw.flush();

在java中,tcp協議是已經封裝好的類,可直接供用戶使用。其中關鍵的兩個類是

Socket類 ? ? ServerSocket類。

ServerSocket類用來創建服務器,具體用法請參照jdk文檔。常用用法是

ServerSocket ss = new ServerSocket((int)port) //傳入一個端口號,用戶自定

Socket用于控制兩端的連接,服務器的Socket可以和客戶端的Socket相連接:

socket可以使用inputstream和outputstream進行相互通信。

(服務器中通常是將已將建立連接的socket丟給子線程通信,但是點對點可以讓服務器處理一個socket就行了,不需要再生成子線程進行通信交流)

?

?

代碼分為三個文件。

程序運行結果:

?

以下是代碼附上:

//package org.cat.Client;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.Socket;public class MyClient {public static void main(String[] args){try {Socket s = new Socket("localhost", 12341);System.out.println("conneting to server successfully");//successfully connecting to server//Now sending some data to server//1.create outputStream and so on...OutputStream out = s.getOutputStream();PrintWriter pw = new PrintWriter(out);pw.write("fuck you server"); //send to serverpw.write("\n"); //importantpw.flush();System.out.println("I have sended to server");//2.receiving data from serverInputStream in = s.getInputStream();InputStreamReader inReader = new InputStreamReader(in);BufferedReader bfdReader = new BufferedReader(inReader);String tmp = "xxxx,receiving failed";while((tmp = bfdReader.readLine()) != null)System.out.println("server tells:"+tmp);//close allin.close();inReader.close();bfdReader.close();out.close();pw.close();} catch (IOException e) {System.out.println("connecting failed,have u opened server?");e.printStackTrace();}} }

?

//package org.cat.Server;import java.io.IOException; import java.net.ServerSocket; import java.net.Socket;public class MyServer {public static void main(String[] args){try {@SuppressWarnings("resource")ServerSocket sers = new ServerSocket(12341);//then wait for client to connectSocket s;System.out.println("waiting for client to connect");s = sers.accept();new MyThread(s);} catch (IOException e) {System.out.println("set up server failed??");e.printStackTrace();}}}

?

//package org.cat.Server;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.Socket;public //service for every client class MyThread extends Thread{Socket s;public MyThread(Socket s) {this.s = s;start();//telling that connection has been settle up System.out.println("successed to connet with port of"+s.getLocalPort());//now receiving data and talk back to client//1.receivetry {InputStream in = s.getInputStream();InputStreamReader inReader = new InputStreamReader(in);BufferedReader bfdReader = new BufferedReader(inReader);String tmp = "xxxx,receiving failed";if((tmp = bfdReader.readLine()) != null)System.out.println("client tells:"+tmp);//anwser clientOutputStream out = s.getOutputStream();PrintWriter pw = new PrintWriter(out);pw.write("fuck you cient"); //send to serverpw.write("\n");pw.flush();System.out.println("I have sended to client");//close allout.close();pw.close();in.close();inReader.close();bfdReader.close();} catch (IOException e1) {System.out.println("get inputStream from client failed");e1.printStackTrace();}System.out.println("now to shut connection");try {s.close();System.out.println("shut down connection successfully");} catch (IOException e) {System.out.println("shut server failed,have u opened it?");e.printStackTrace();}}}

?

轉載于:https://my.oschina.net/qkmc/blog/861499

總結

以上是生活随笔為你收集整理的JAVA TCP通信基础篇——对发消息【如何解决输入流假死状态】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。