TCP、UDP 網路通訊
TCP 網路通訊
TCP:可靠的傳輸層協議
服務端:
package com.zhiwei.net; import java.io.DataInputStream; import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; /*** * 簡單的TCP服務端類 * ①:建立ServerSocket:資料碼頭 * ②:建立Socket:資料碼頭集裝箱:真正的資料集中站 * ③:解析Socket獲取InputStream和OutputStream物件 * InputStream和OutputStream都和同一個Socket關聯, * InputStream:負責接受客戶端的資料 * OutputStream:負責對客戶端做出響應 *注:Tomcat的Http請求也是利用該原理,聯結器接受客戶端請求負責建立HttpRequest和HttpResponse物件(本質解析Socket),然後呼叫處理器處理 * @author Yang Zhiwei * */ public class SimpleTCPServer { private static boolean flag=true; //伺服器開啟標誌 public static void main(String[] args) throws Exception { ServerSocket serverSocket=new ServerSocket(8888); while(flag){ //當服務端程式執行到該階段時執行緒阻塞,直到接受客戶端請求才向下流轉(Debug可以檢視) Socket socket=serverSocket.accept(); new ServerService(socket).run(); } serverSocket.close(); } } class ServerService implements Runnable{ private Socket socket=null; public ServerService(Socket socket) { this.socket=socket; } @Override public void run() { InputStream is = null; DataInputStream dis = null; try { is = socket.getInputStream(); dis=new DataInputStream(is); System.out.println("客戶端請求內容:"+dis.readUTF()); } catch (Exception e) { e.printStackTrace(); }finally{ try { if(dis!=null){ dis.close(); } socket.close(); } catch (IOException e) { e.printStackTrace(); } } } }
客戶端:
package com.zhiwei.net; import java.io.DataOutputStream; import java.io.OutputStream; import java.net.Socket; /** * TCP客戶端的建立 * ①:建立Socket:資料集裝箱:必須指定服務端的地址 * ②:解析Socket資料:負責和服務端的具體資料通訊 * @author Yang Zhiwei * */ public class SimpleTCPClient { public static void main(String[] args) throws Exception { Socket socket=new Socket("127.0.0.1", 8888); OutputStream os=socket.getOutputStream(); DataOutputStream dos=new DataOutputStream(os); dos.writeUTF("Hello Server....."); dos.close(); socket.close(); } }
結果:
UDP 網路通訊
UDP是無狀態的傳輸層協議,如果對資料的要求不高完全可以使用UDP協議,減少資源的浪費,UDP不保證資料的可靠性,常見的QQ通訊工具是使用UDP協議的,只是在應用層的基礎上保證QQ訊息的不丟失,並不是採用TCP的傳輸協議
服務端:
package com.zhiwei.net; import java.net.DatagramPacket; import java.net.DatagramSocket; //伺服器端接受客戶端資料 public class UDPServer { public static void main(String[] args) throws Exception{ //建立資料接收碼頭,只接受和客戶端約定的3000埠的資料 DatagramSocket ds=new DatagramSocket(3000); //建立資料接收的資料緩衝區 byte[] buf=new byte[1024]; DatagramPacket dp=new DatagramPacket(buf,1024); //接受來自埠1024的資料包,並存儲在集裝箱datagramPacket中:注意一旦伺服器開啟,就會自動監聽3000埠,如果 沒有資料,則進行阻塞 ds.receive(dp); //解析資料包中的資訊 String data=new String(dp.getData(),0,dp.getLength()); String ip=dp.getAddress().getHostAddress(); int port=dp.getPort(); System.out.println("ip地址:"+ip+" 埠號:"+port+" 訊息:"+data); ds.close(); } }
客戶端:
package com.zhiwei.net;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
//傳送資料給伺服器:注意若伺服器端未開啟就傳送資料,資料包很可能會丟失
public class UDPClient {
public static void main(String[] args) throws Exception {
//資料包套接字:相當於碼頭,專門處理通訊資料及進行資料轉發設定的
DatagramSocket ds=new DatagramSocket();
String message="Hello Java World!";
//資料報包:類似於集裝箱,用來儲存所有的資料資訊
DatagramPacket dp=new DatagramPacket(
message.getBytes(), //資料都是已位元組資料進行傳送的,因此需要將資料進行轉換
message.length(), //傳送資料的長度
InetAddress.getByName("127.0.0.1"), //傳送資料的源ip地址
3000 //傳送資料的埠號
);
ds.send(dp); //資料包通過碼頭DatagramSocket傳送出去
ds.close(); //資料傳送之後關閉通道,減少資源浪費
}
}
結果:
相關推薦
TCP、UDP網路通訊
IP地址和埠號 埠號是用兩個位元組(16位的二進位制數)表示的,它的取值範圍是0~65535,其中,0~1023之間的埠號用於一些知名的網路服務和應用, 使用者的普通應用程式需要使用1024以上的埠號,從而避免埠號被另外一個應用或服務所佔用。 &n
TCP、UDP 網路通訊
浪費了“黃金五年”的Java程式設計師,還有救嗎? >>>
網路程式設計實驗一——TCP、UDP網路程式設計
一、實驗目的 1、利用TCP實現套接字通訊並理解TCP通訊的工作原理。 2、利用UDP實現套接字通訊並理解UDP通訊的工作原理。 實驗環境及準備 裝有Linux系統的計算機。 二、實驗原理 1、TCP/IP協議存在於OS中,網路服務通過OS提供。 2、應用程式要
Qt開發:TCP和UDP網路通訊
【原文】http://wuyuans.com/2013/03/qt-socket/ 這篇文章簡潔清晰 TCP 客戶端 #include <QtNetwork> QTcpSocket *client; char *data="hello qt!"; client
C#基於TCP、UDP協議的網路通訊實現(unity)
一、TCP協議: TCP協議是面向有連線的,所以伺服器要與客戶端建立連線 伺服器端: using System; using System.Net.Sockets; using System.Net; using System.Text; public static
Network——Socket網路通訊機制以及實現舉例(TCP、UDP等)
1. 網路通訊與Socket前言TCP/IP協議族中網路層的IP地址可以唯一標識網路中的主機,而傳輸層的埠可以唯一標識主機中的應用程式。Socket通常也稱作"套接字",用於描述IP地址和埠,是一個通
Android程序間通訊 - Socket使用(TCP、UDP)
在使用Socket實現程序間通訊前,先對網路協議相關知識進行簡單回顧。 網路分層 一般情況會將網路分為5層: 應用層 常見協議:HTTP、FTP、POP3等 傳輸層
常見通訊協議區別——tcp、udp、rpc、http、socket
TCP/IP TCP/IP協議是一個協議簇。裡面包括很多協議的。UDP只是其中的一個。之所以命名為TCP/IP協議,因為TCP,IP協議是兩個很重要的協議,就用他兩命名了。 tcp和udp
Java中的TCP、UDP通訊
文章目錄TCP建立伺服器建立客戶端UDP小結 TCP TCP 協議提供面向連線的服務,通過它建立的是可靠地連線。Java 為 TCP 協議提供了兩個類:Socke 類和 ServerSocket 類。
iOS網路HTTP、TCP、UDP、Socket 知識總結
一、前言 以下是我自己的學習加理解,分享給大家,同時也算是自己做的筆記吧,俗話說好記性不如爛筆頭,希望來的你能有所幫助,有什麼理解不到位的地方,還請大神些多多指教。 二、網路模型 OSI 七層模型:我們一般使用的網路資料傳輸由下而上共有七層,分別
TCP、UDP、網路程式設計
1、TCP 的網路程式設計開發分為伺服器端和客戶端兩部分,常見的核心步驟和流程如下: (1)TCP服務端程式設計的一般步驟為: 呼叫socket函式,建立一個套接字描述符。 建立網路地址結構,指定要監聽的IP和埠號。 呼叫bind函式,將套接字描述符與網路地址結構繫結
【計算機網路】(一)OSI, TCP/IP模型 & 網路HTTP、TCP、UDP、Socket 基本知識總結
OSI 七層模型 我們一般使用的網路資料傳輸由下而上共有七層,分別為物理層、資料鏈路層、網路層、傳輸層、會話層、表示層、應用層,也被依次稱為 OSI 第一層、第二層、⋯⋯、 第七層。 如下圖: 各層功能簡介 1.物理層(Physical Layer)
圖解HTTP,狀態碼,TCP、UDP等網路協議相關總結(持續更新)
前言:主要是記錄學習《圖解HTTP》這本書的知識,此外,還會夾雜一些平時整理的網路相關的筆記。 一、TCP/IP 的分層管理 1.首先分為4層:應用層,傳輸層,網路層,鏈路層。 應用層:決定了向用戶提供應用服務時通訊的活動。TCP/IP 協議族內預存了各類通用的應用服務
以太坊原始碼分析之 P2P網路(三、UDP底層通訊)
區塊鏈特輯 :https://blog.csdn.net/fusan2004/article/details/80879343,歡迎查閱,原創作品,轉載請標明!這周工作有點小忙,部門區塊鏈基礎平臺的開發開始進入節奏了,和上一篇間隔間隔有點久了,以後還是要堅持,不能剛開始就犯毛
網路協議概述(網路層次結構、TCP、UDP)
1.網路協議縱覽 參考文章:http://www.cnblogs.com/syfwhu/p/5237652.html 網路協議 網路協議是網路上所有裝置(網路伺服器、計算機及交換機、路由器、防火牆等)之間通訊規則的集合,它規定了通訊時資訊必須採用的格式和這些格式的意義。大多數
Socket、TCP、UDP、HTTP、FTP等網路協議
1、TCP/IP是個協議組,可分為三個層次:網路層、傳輸層和應用層。 在網路層有IP協議、ICMP協議、ARP協議、RARP協議和BOOTP協議。 在傳輸層中有TCP協議與UDP協議。 注意:TCP是一種面向連線(連線導向)的、可靠的、基於IP的傳輸層協議;UDP協議的全稱
初識http、https、TCP/IP、Socket網路通訊
網路由下往上分為: 物理層– 資料鏈路層– 網路層– IP協議 傳輸層– TCP協議 會話層– 表示層和應用層– HTTP協議 一、TCP/
SOCKET通訊中TCP、UDP資料包大小的確定
TCP、UDP資料包大小的確定 UDP和TCP協議利用埠號實現多項應用同時傳送和接收資料。資料通過源埠傳送出去,通過目標埠接收。有的網路應用只能使用預留或註冊的靜態埠;而另外一些網路應用則可以使用未被註冊的動態埠。因為UDP和TCP報頭使用兩個位元組存放埠號,所以埠號的有效範圍是從0到6
通過shell終端直接開啟socket檔案進行TCP、UDP通訊
linux中有一個特殊的檔案/dev/tcp,開啟這個檔案就類似於發出了一個socket呼叫,建立一個socket連線,讀寫這個檔案就相當於在這個socket連線中傳輸資料。 開啟/dev/tcp 以讀寫方式開啟/dev/tcp,並指定伺服器名為: www.c
Android網路程式設計TCP、UDP(三)——UDP例項:搜尋區域網所有的裝置
接上面的UDP,本篇主要討論如何在區域網中搜索所有的裝置,這個需求在物聯網應用的比較多,也比較綜合,特把名字加在標題中了。最後一塊是網路程式設計的常見問題。 3.6 例項:在區域網內搜尋裝置 假設你家裡安裝了智慧家居,所有的裝置都是通過Wifi連線自己家