udp作為一種簡單的、面向資料報的無連線的協議,雖然提供的是不可靠的服務,但是從速度上、一對多傳輸方面比tcp有著很大的優勢。本文主要講解udp資訊的傳送和接收。
demo介面圖如下:
首先開啟程式exe檔案開啟「接收」的服務,然後再次啟動程式,輸入資訊,即可傳送資訊了,效果圖如下:
細心的人會發現,我在接受訊息時,已經把接收到的每乙個字元的ascii碼的十進位制值給列印出來了,這是為了區別encoding.default和encoding.unicode編碼方式的區別。
如下面的小例子:
用encoding.default方式進行編碼
string message = "hello";byte sendbytes = encoding.default.getbytes(message);
for (int i = 0; i
", sendbytes[i].tostring()));
}shwmsgforview.shwmsgforview(listbox, "傳送訊息:" + message);
return;
輸出的結果為:
用encoding.unicode方式進行編碼
string message = "hello";//byte sendbytes = encoding.default.getbytes(message);
byte sendbytes = encoding.unicode.getbytes(message);
for (int i = 0; i
", sendbytes[i].tostring()));
}shwmsgforview.shwmsgforview(listbox, "傳送訊息:" + message);
return;
輸出的結果為:
結果一目了然,如果使用encoding.unicode編碼方式對字串進行編碼的話,會自動的在每乙個字元後面加乙個0,這是因為在字串轉換到位元組陣列的過程中,encoding.default 會將每個單位元組字元,如半形英文,轉換成乙個位元組;而把每個雙位元組字元,如漢字,轉換成2個位元組。而 encoding.unicode 則會將它們都轉換成兩個位元組。因為和我們進行資料通訊的終端基本都會傳輸ascii碼值,而不會進行unicode編碼
所以,我採用的default編碼方式。
下面為系統**:
public這裡我在獲取本機ip位址時用的是ips[1].tostring(),發現很多都是用ips[0].tostring()。經過除錯發現,ips[0].tostring()為ipv6的位址,而ips[1].tostring()才是ipv4的位址。如下圖:main()
調試圖
cmd檢視ipconfig圖
傳送資訊類**如下:
using接受訊息類**:system;
using
system.collections.generic;
using
system.linq;
using
system.text;
using
system.net.sockets;
using
system.net;
using
system.threading;
using
system.windows.forms;
namespace
businesslogiclayer
private
static
void sendmessages(object
obj)
#endregion
}}
using顯示訊息類**:system;
using
system.collections.generic;
using
system.linq;
using
system.text;
using
system.net.sockets;
using
system.net;
using
system.threading;
using
system.windows.forms;
namespace
businesslogiclayer
private
static
void
receivemessages()
", remoteipendpoint, receivebytes[i].tostring()));
}//string message = encoding.unicode.getstring(receivebytes, 0, receivebytes.length);
string message = encoding.ascii.getstring(receivebytes, 0
, receivebytes.length);
//顯示接受到的訊息內容
shwmsgforview.shwmsgforview(listbox, string.format("
", remoteipendpoint, message));
}catch}}
public
static
void
closereceiveudpclient()
#endregion
}}
using至此udp傳送和接收訊息搞定,下篇文章分享下使用tcp傳輸檔案。system;
using
system.collections.generic;
using
system.linq;
using
system.text;
using
system.windows.forms;
namespace
businesslogiclayer
); }
else}}
}
C UDP傳送接收檔案 BMP
傳送檔案 include include include include pragma comment lib,ws2 32.lib define dest port 3000 define max data 51200 50kb define dest ip address 127.0.0.1 1...
C UDP的多路廣播組的傳送和接收
下列範例使用 udpclient,在通訊埠11000傳送udp 資料報至多點傳送位址群組 224.268.100.2。它傳送命令列上指定的資訊字串。c using system using system.net using system.net.sockets using system.text p...
kafka 訊息傳送和接收
傳送 例項 public class kafkaproducerdemo extends thread override public void run else catch interruptedexception e catch executionexception e num try catc...