一.伺服器端server
1.基本思路:
①載入庫:選擇乙個種類 wsastartup();
②建立套接字:與外界通訊的介面 socket();
④收發資料
⑤關閉套接字:closesocket();
⑥解除安裝庫:wsacleanup();
2.**實現:
1 #include2 #include3using
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 #include3using
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 對已經使用的類的改動是通過增加 進行的,而不是修改現有 裡式替換原則 ...