原 作 者:李良剛
原 出 處:vczx.com
發 布 者:李良剛
發布型別:原創
發布日期:2004-08-25
由於,要能對多個客戶端的管理。需要通過udp,模擬多個客戶端聯接驗證的情況。
設計選型:
為了盡量提高可靠性和穩定性,我選用事件模型的winsock api的非同步重疊模式。只所以沒有選完成端,是因為我們的客戶端並不是很多,200以內就夠了。這個200是因為我每秒鐘要把1--4k左右的圖象資料發給200個客戶端 20次左右。如果再多,不可能完成。
訊息模式是基於訊息的,可靠性和效率沒有事件模型高。
winsock1.1不考慮。定為winsock2.2, 幸好,連win98都自帶winsock2.2。
為什麼不用多播?
一是,有些網路不支援多播,二是,多播實現起來更麻煩一些,以後再考慮這方面的實現。
設計思路:
建立乙個socket. 並監聽事件。 啟動執行緒接收資料.
用乙個連表coblist, 儲存所有聯上的客戶,並通知聯接成功。這樣客戶有機會,處理這一事件並作一些動作。
當客戶斷開時,向伺服器發乙個事件,這樣,伺服器也可以做一些收尾的事情,當然,這一些要安全的發生。
if (nret != 0) }
// // if the i/o isn't finished...
// if (fpending)
if (dwret != wait_object_0)//wait_object_0/wait_timeout
closehandle(over.hevent);
trace("傳送成功/n",null);
m_lock.unlock();
// // zero the buffer so the recv is null-terminated
// memset(pbuf, 0, dwbufsize);
// // recv event is complete -- keep statistics
// m_translate = dwrecv;
return true;
} 資料處理部分。
bool cudpsock::delwithresdata(struct sockaddr far *lpfrom)
assert(onepagleft <= iobufflen);
pags.buff = new char[onepagleft];
if(m_******iobuffer.read(pags.buff ,onepagleft)) }
delete pags.buff;
}else
m_bfillhead = true;
onepagleft = m_packhead.len - lenpag;
if(m_******iobuffer.getbufferlen() < onepagleft)
assert(onepagleft <= iobufflen);
pags.buff = new char[onepagleft];
if(m_******iobuffer.read(pags.buff ,onepagleft)) }
delete pags.buff;
} }
if(m_translate)
catch (...)
m_******iobuffer.notify();
} return ;
一, 注意有乙個緩衝區m_******iobuffer主要用來保證每次收發的完整性。然後就是c++異常機制,主要是為了穩定性。
二, 在cudpsock::delwithresdata的處理部分,有很多保護措施。這很重要。
然後從cudpsock派生乙個csverudpsock如下:
#include "udpsock.h"
#include "clientudpconnect.h"
#include "afxtempl.h"
class csverudpsock : public cudpsock
; 注意的地方就是安全處理種種聯接請求和斷開請求。
mysql udp伺服器 UDP伺服器
傳輸層主要應用的協議模型有兩種,一種是tcp協議,另外一種則是udp協議。tcp協議在網路通訊中佔主導地位,絕大多數的網路通訊借助tcp協議完成資料傳輸。但udp也是網路通訊中不可或缺的重要通訊手段。相較於tcp而言,udp通訊的形式更像是發簡訊。不需要在資料傳輸之前建立 維護連線。只專心獲取資料就...
UDP簡單伺服器
udp簡單伺服器與客戶端 這裡用到了 recvfrom 表示接受來自何處的連線請求資訊 sendto 要向何處傳送 下面這段 是伺服器原始碼 下面主要用到 socket 建立udp協議的套接字 bind 繫結本機三元資訊 recvfrom 接收客戶端向本機伺服器傳送來得資訊 sendto 向客戶端傳...
基於UDP協議的伺服器 UDP伺服器建立方案
udp伺服器就是實現乙個基於udp協議的伺服器來與客戶端通訊。就是用來收發資料,進行資料處理的。與tcp伺服器不同的是不用建立連線,直接呼叫recvfrom來收包。跟tcp伺服器一樣,udp伺服器也可以通過使用 socketserver 庫很容易地被建立。先定義乙個實現 handle 特殊方法的類,...