日韩性视频-久久久蜜桃-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久久爽久久爽爽久久片 | 激情五月婷婷丁香 | 东方av在线播放 | 午夜一本 | 日产亚洲一区二区三区 | 欧美精品在线观看一区二区 | 亚洲系列在线观看 | 视频在线一区二区 | 九九九九九精品 | 在线三级av| 国产高清一区在线观看 | 国产精品久久久久久久久久免费看 | 麻豆精品一区 | 郑艳丽三级 | 香港三级日本三级 | www.av88| 另类专区成人 | 日本成人福利视频 | 国产又粗又猛又爽免费视频 | 欧美熟女一区二区 | 不卡福利视频 | 日日骚av一区二区 | 日本免费一区二区三区四区五六区 | 少妇无码av无码专区在线观看 | 亚洲色图欧美激情 | 毛片看看 | 色就色欧美 | 国产日韩免费 | 99爱精品| 女生扒开尿口让男生桶 | 欧美a级成人淫片免费看 | 日韩视频一区在线观看 | 中文字幕在线播放视频 | 欲涩漫入口免费网站 | 91麻豆国产 | 日本大乳美女 | 91区| 日本一区二区视频 | 久久综合一区 | 少妇被又大又粗又爽毛片久久黑人 | 色综合久久天天综合网 | 呦呦在线视频 | 欧美视频免费看欧美视频 | 无码国产精品高潮久久99 | 国产污污网站 | 99福利视频导航 | 欧美一级视频免费观看 | 曰本无码人妻丰满熟妇啪啪 | 95视频在线 | va婷婷 | 欧美日韩在线观看一区二区三区 | 黄色在线免费网站 | 国产成人午夜精华液 | 精品国产乱 | 亚洲国产无码精品 | 小宵虎南在线观看 | 国产精品无码一区 | 日韩一区二区三区精品 | 婷婷天堂 | 一区二区三区精品视频 | 男女交性视频 | 欧美一卡二卡三卡 | 琪琪色影音先锋 | 精品欧美一区二区在线观看 | 99re国产精品 | 91高清网站| 欧美精品videos | 精精国产xxxx视频在线播放 | 香蕉视频在线观看www | 中文字幕在线官网 | 青青草视频偷拍 | 亚洲国产高清在线 | 欧美在线日韩 | 一区一区三区产品乱码 | 欧洲美一区二区三区亚洲 | 一区二区三区视频在线免费观看 | 国产精品亚洲一区二区三区 | 国产免费啪啪 | 永久久久久久 | 91精品啪在线观看国产线免费 | 91在线综合 | 国产精品久久久久久久专区 | 国产黄片毛片 | www.色香蕉 | 超碰成人在线观看 | 91深夜福利| 91一区二区三区四区 | 欧美性免费| av片网站 | 亚洲色图88 | 国产新婚疯狂做爰视频 | 欧美日韩一级黄色片 | 奇米影视999 | 欧美老熟妇乱大交xxxxx | 国产av无码专区亚洲a∨毛片 | 婷婷亚洲一区 | 操操网站| 亚洲综合精品国产 | 国产视频一二三区 |