《網路》 UDP C S模式設計 及UDP特點

2022-07-13 17:18:11 字數 3531 閱讀 6224

一.伺服器端server

1.基本思路:

①載入庫:選擇乙個種類 wsastartup();

②建立套接字:與外界通訊的介面 socket();

④收發資料

⑤關閉套接字:closesocket();

⑥解除安裝庫:wsacleanup();

2.**實現:

1 #include2 #include3

using

namespace

std;45

//need to link with ws2_32.lib

6#pragma comment(lib, "ws2_32.lib")78

9int

main()

1026

27/*

confirm that the winsock dll supports 2.2.

*/28

/*note that if the dll supports versions greater

*/29

/*than 2.2 in addition to 2.2, it will still return

*/30

/*2.2 in wversion since that is the version we

*/31

/*requested.

*/32

33if (lobyte(wsadata.wversion) != 2 || hibyte(wsadata.wversion) != 2

) 40

else

41 printf("

the winsock 2.2 dll was found okay\n");

4243

//2.建立套接字 與外界通訊的介面

44 socket socklisten =socket(af_inet,sock_dgram,ipproto_udp);

45if(socklisten ==invalid_socket)

4650

51//

3.繫結

52sockaddr_in addr;

53 addr.sin_family =af_inet;

54 addr.sin_port = htons(1234

);55

= inaddr_any;

//或是 inet_addr("自己的ip位址")

56 addr.sin_addr.s_un.s_addr = inet_addr("

192.168.2.167");

57if(socket_error == bind(socklisten,(const sockaddr *)&addr,sizeof

(addr)))

5863

64//

4.收發資料

65sockaddr_in addrclient;

66int nsize = sizeof

(addrclient);

67char szbuf[1024] = ;

68while(1)69

78}7980

//關閉套接字 解除安裝庫

81closesocket(socklisten);

82wsacleanup();

8384 system("

pause");

85return0;

86 }

二.客戶端client

1.基本思路:

①載入庫:wsastartup();

②建立套接字:socket();

③繫結:bind();

④收發資料

⑤關閉套接字:closesocket();

⑥解除安裝庫:wsacleanup();

2.**實現:

1 #include2 #include3

using

namespace

std;45

//need to link with ws2_32.lib

6#pragma comment(lib, "ws2_32.lib")78

intmain()925

26/*

confirm that the winsock dll supports 2.2.

*/27

/*note that if the dll supports versions greater

*/28

/*than 2.2 in addition to 2.2, it will still return

*/29

/*2.2 in wversion since that is the version we

*/30

/*requested.

*/31

32if (lobyte(wsadata.wversion) != 2 || hibyte(wsadata.wversion) != 2

) 39

else

40 printf("

the winsock 2.2 dll was found okay\n");

4142

//2.建立套接字 與外界通訊的介面

43 socket sockclient =socket(af_inet,sock_dgram,ipproto_udp);

44if(sockclient ==invalid_socket)

4549

50//

3.繫結

51sockaddr_in addr;

52 addr.sin_family =af_inet;

53 addr.sin_port = htons(1234

);54 addr.sin_addr.s_un.s_addr = inet_addr("

192.168.2.255");

5556

57//

4.收發資料

58char szbuf[1024] = ;

59while(1)60

*/68}69

70//

關閉套接字 解除安裝庫

71closesocket(sockclient);

72wsacleanup();

7374 system("

pause");

75return0;

76 }

注:單執行緒只能實現一發一收 可以用多執行緒來解決這個問題

三.udp特點

①面向無連線:誰發都隨時接 廣播 多播

②以資料報文的方式來傳播:大小固定 不可拆分

③優點:傳輸效率高

缺點:會有丟包 亂序的可能

Reactor網路設計模式

簡單通訊模型缺點在於核心函式會阻塞,cpu利用率低。reactor事件處理模式應運而生。同步i o模型通常用於實現reactor模式。reactor模式要求主線程 i o處理單元 只負責監聽檔案描述符上是否有事件發生,有的話就立即將該事件通知工作單元 邏輯單元 除此之外,主線程不做任何其他實質性的工...

設計模式及demo

1 工廠方法模式 意圖 定義乙個建立物件的介面,讓其子類自己決定例項化哪乙個工廠類,工廠模式使其建立過程延遲到子類進行。主要解決 主要解決介面選擇的問題。何時使用 我們明確地計畫不同條件下建立不同例項時。如何解決 讓其子類實現工廠介面,返回的也是乙個抽象的產品。關鍵 建立過程在其子類執行。demo ...

設計原則及模式

物件導向六大設計原則 單一職責原則 single responsiblity principle 每個類應該只有乙個職責,對外只能提供一種功能,而引起類變化的原因應該只有乙個 開閉原則 open closed principle 對已經使用的類的改動是通過增加 進行的,而不是修改現有 裡式替換原則 ...