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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

java 与 .net socket_java.net.Socket/java.net.ServerSocket-TCP Socket编程

發布時間:2025/3/21 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 与 .net socket_java.net.Socket/java.net.ServerSocket-TCP Socket编程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

TCP 的 Java 支持

協議相當于相互通信的程序間達成的一種約定,它規定了分組報文的結構、交換方式、包含的意義以及怎樣對報文所包含的信息進行解析,TCP/IP 協議族有 IP 協議、TCP 協議和 UDP 協議。現在 TCP/IP 協議族中的主要 socket 類型為流套接字(使用 TCP 協議)和數據報套接字(使用 UDP 協議)。

TCP 協議提供面向連接的服務,通過它建立的是可靠地連接。Java 為 TCP 協議提供了兩個類:Socke 類和 ServerSocket 類。一個 Socket 實例代表了 TCP 連接的一個客戶端,而一個 ServerSocket 實例代表了 TCP 連接的一個服務器端,一般在 TCP Socket 編程中,客戶端有多個,而服務器端只有一個,客戶端 TCP 向服務器端 TCP 發送連接請求,服務器端的 ServerSocket 實例則監聽來自客戶端的 TCP 連接請求,并為每個請求創建新的 Socket 實例,由于服務端在調用 accept()等待客戶端的連接請求時會阻塞,直到收到客戶端發送的連接請求才會繼續往下執行代碼,因此要為每個 Socket 連接開啟一個線程。服務器端要同時處理 ServerSocket 實例和 Socket 實例,而客戶端只需要使用 Socket 實例。另外,每個 Socket 實例會關聯一個 InputStream 和 OutputStream 對象,我們通過將字節寫入套接字的 OutputStream 來發送數據,并通過從 InputStream 來接收數據。

TCP 連接的建立步驟

客戶端向服務器端發送連接請求后,就被動地等待服務器的響應。典型的 TCP 客戶端要經過下面三步操作:

創建一個 Socket 實例:構造函數向指定的遠程主機和端口建立一個 TCP 連接;

通過套接字的 I/O 流與服務端通信;

使用 Socket 類的 close 方法關閉連接。

服務端的工作是建立一個通信終端,并被動地等待客戶端的連接。

典型的 TCP 服務端執行如下兩步操作:

創建一個 ServerSocket 實例并指定本地端口,用來監聽客戶端在該端口發送的 TCP 連接請求;

重復執行:

調用 ServerSocket 的 accept()方法以獲取客戶端連接,并通過其返回值創建一個 Socket 實例;

為返回的 Socket 實例開啟新的線程,并使用返回的 Socket 實例的 I/O 流與客戶端通信; 通信完成后,使用 Socket 類的 close()方法關閉該客戶端的套接字連接。

TCP Socket Demo

下面給出一個客戶端服務端 TCP 通信的 Demo,該客戶端在 20006 端口請求與服務端建立 TCP 連接,客戶端不斷接收鍵盤輸入,并將其發送到服務端,服務端在接收到的數據前面加上“echo”字符串,并將組合后的字符串發回給客戶端,如此循環,直到客戶端接收到鍵盤輸入“bye”為止。

客戶端代碼如下:

packagezyb.org.client;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.PrintStream;importjava.net.Socket;importjava.net.SocketTimeoutException;public classClient1 {public static void main(String[] args) throwsIOException {//客戶端請求與本機在20006端口建立TCP連接

Socket client = new Socket("127.0.0.1", 20006);

client.setSoTimeout(10000);//獲取鍵盤輸入

BufferedReader input = new BufferedReader(newInputStreamReader(System.in));//獲取Socket的輸出流,用來發送數據到服務端

PrintStream out = newPrintStream(client.getOutputStream());//獲取Socket的輸入流,用來接收從服務端發送過來的數據

BufferedReader buf = new BufferedReader(newInputStreamReader(client.getInputStream()));boolean flag = true;while(flag){

System.out.print("輸入信息:");

String str=input.readLine();//發送數據到服務端

out.println(str);if("bye".equals(str)){

flag= false;

}else{try{//從服務器端接收數據有個時間限制(系統自設,也可以自己設置),超過了這個時間,便會拋出該異常

String echo =buf.readLine();

System.out.println(echo);

}catch(SocketTimeoutException e){

System.out.println("Time out, No response");

}

}

}

input.close();if(client != null){//如果構造函數建立起了連接,則關閉套接字,如果沒有建立起連接,自然不用關閉

client.close(); //只關閉socket,其關聯的輸入輸出流也會被關閉

}

}

}

服務端需要用到多線程,這里單獨寫了一個多線程類,代碼如下:

packagezyb.org.server;importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.io.PrintStream;importjava.net.Socket;/*** 該類為多線程類,用于服務端*/

public class ServerThread implementsRunnable {private Socket client = null;publicServerThread(Socket client){this.client =client;

}

@Overridepublic voidrun() {try{//獲取Socket的輸出流,用來向客戶端發送數據

PrintStream out = newPrintStream(client.getOutputStream());//獲取Socket的輸入流,用來接收從客戶端發送過來的數據

BufferedReader buf = new BufferedReader(newInputStreamReader(client.getInputStream()));boolean flag =true;while(flag){//接收從客戶端發送過來的數據

String str =buf.readLine();if(str == null || "".equals(str)){

flag= false;

}else{if("bye".equals(str)){

flag= false;

}else{//將接收到的字符串前面加上echo,發送到對應的客戶端

out.println("echo:" +str);

}

}

}

out.close();

client.close();

}catch(Exception e){

e.printStackTrace();

}

}

}

服務端處理 TCP 連接請求的代碼如下:

packagezyb.org.server;importjava.net.ServerSocket;importjava.net.Socket;public classServer1 {public static void main(String[] args) throwsException{//服務端在20006端口監聽客戶端請求的TCP連接

ServerSocket server = new ServerSocket(20006);

Socket client= null;boolean f = true;while(f){//等待客戶端的連接,如果沒有獲取連接

client =server.accept();

System.out.println("與客戶端連接成功!");//為每個客戶端連接開啟一個線程

new Thread(newServerThread(client)).start();

}

server.close();

}

}

執行結果截圖如下:

總結

以上是生活随笔為你收集整理的java 与 .net socket_java.net.Socket/java.net.ServerSocket-TCP Socket编程的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 美女一级黄 | 免费成人91 | 亚洲一区欧洲一区 | 97人妻天天摸天天爽天天 | 天天综合天天色 | 美女的奶胸大爽爽大片 | 华丽的外出在线 | 6996电视影片免费看 | 亚洲av无码专区首页 | 欧美日韩国内 | 国产精品成人无码专区 | 我要操婊 | 精品无码久久久久国产 | 精品人妻一区二区三区蜜桃 | www狠狠爱 | 欧美性一级| 中文字幕一区二区三区久久久 | 99福利| 黑料福利 | 欧洲三级在线 | 国产精品色图 | aa视频在线观看 | 蜜桃av噜噜一区二区三区 | 免费毛片一区二区三区久久久 | 久久国产精品免费视频 | 中文字幕在线观看视频一区 | 五月婷婷狠狠 | 黑人毛片网站 | 国产精品视频大全 | 在线观看日韩中文字幕 | 俺去操| 精品一区在线看 | 久青草视频在线 | 黄色免费网站在线 | 午夜网站在线观看 | 色黄网站| 人妻中文字幕一区二区三区 | 毛片a级片 | 欧美三区在线观看 | 国产在线一区视频 | 青青草自拍| 国产免费久久 | 国产青青草在线 | 中文字幕永久在线观看 | 激情综合婷婷 | 日韩乱码人妻无码中文字幕 | 久久精品欧美一区二区三区不卡 | 在线观看免费黄视频 | 超碰精品在线 | 黄色成人在线免费观看 | 国产福利午夜 | 国产一区二区三区久久久 | 免费av大全 | 永久免费毛片 | 国产欧美在线精品日韩 | 久久综合久 | 99久久精品免费看国产四区 | 综合色婷婷一区二区亚洲欧美国产 | 欧美一级淫片免费视频魅影视频 | 日韩欧美在线一区二区 | 国产欧美一区二区三区在线看 | 99re免费视频精品全部 | 伊人称影院| 黄色一级大片在线免费看产 | 美女视频久久久 | 亚洲午夜精品久久久久久浪潮 | 亚洲成熟毛多妇女av毛片 | 以女性视角写的高h爽文 | 日韩一区二区三区四区五区六区 | 河北彩花69xx精品一区 | 青青91| 成人免费毛片嘿嘿连载视频 | 日本久久不卡 | 狠狠干2020 | 日本成人免费在线 | 国产成人久久精品麻豆二区 | 国产美女视频网站 | 一区二区三区av在线 | 欧美一区二区三区爱爱 | 法国空姐电影在线 | 欧美大片www | 日韩特黄 | 国产情侣免费视频 | 性感美女视频一二三 | 亚洲高清毛片一区二区 | 欧美中文字幕视频 | 亚洲av综合一区二区 | 综合网激情| 久久精品国产99久久久 | 欧美777 | 久久久观看 | 少妇视频一区 | 国产精品区一区二 | 奶水旺盛的女人伦理 | 色婷婷777777仙踪林 | 亚洲va欧美va国产综合久久 | 天天干天天操心 | 不良视频在线观看 | 亚洲五月六月 |