c UDP傳送接收訊息

2022-05-14 03:21:17 字數 3610 閱讀 9893

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

main()

這裡我在獲取本機ip位址時用的是ips[1].tostring(),發現很多都是用ips[0].tostring()。經過除錯發現,ips[0].tostring()為ipv6的位址,而ips[1].tostring()才是ipv4的位址。如下圖:

調試圖

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

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using

system.windows.forms;

namespace

businesslogiclayer

); }

else}}

}

至此udp傳送和接收訊息搞定,下篇文章分享下使用tcp傳輸檔案。

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...