之前對於網路這塊,了解太少了,一直都沒有太觸及.終於,現在寫客戶端**,經常要與服務端通訊,於是學了起來.
大致說上幾句,據昨天的了解,遊戲的通訊,主要有客戶端/伺服器模型與p2p(peer to peer)兩種.我目前主要研究客戶端/伺服器模型.
tcp協議,是傳輸層協議.是面向連線的穩定協議.ip協議,是網路層協議,對此了解甚少.
研究的目的,就是會用就好.於是我自己定義了乙個用來傳遞的資料結構,實現這些就可以了.我也不是專攻這個,達到能使用就好,呵呵.
這個是基於服務端的應用程式,使用預設的blocking模式.
不多說了,貼出來吧.非常簡單.
// server.cpp -- 服務端實現檔案.
#include "stdafx.h"
#include #include #pragma comment(lib, "ws2_32.lib")
const int gc_maxlengthofqueue = 10 ; // 最大
const unsigned int guc_port = 7100 ;
// 傳送的資料型別
struct data
;int _tmain(int argc, _tchar* argv)
; // 建立要從客戶端接收的資料
struct data datareceivefromclient = ;
// 合成套接字版本.
word wversionrequested = makeword(2, 2) ;
wsadata wsadata ;
// 載入套接字型檔版本.
if (wsastartup(wversionrequested, &wsadata) != 0)
if (lobyte(wsadata.wversion) != 2 ||
hibyte(wsadata.wversion) != 2)
// 建立套接字.
socket socksrv = socket(af_inet, sock_stream, 0) ;
// 設定為blocking模式.
// 在這裡設定只為演示,預設就是blocking模式.
int mode = 0 ;
ioctlsocket(socksrv, fionbio, reinterpret_cast(&mode)) ;
// 將套接字繫結到乙個本地位址和埠上.
sockaddr_in addrsrv ;
addrsrv.sin_addr.s_un.s_addr = htonl(inaddr_any) ;
addrsrv.sin_family = af_inet ;
addrsrv.sin_port = htons(guc_port) ;
bind(socksrv, reinterpret_cast(&addrsrv), sizeof (sockaddr));
// 將套接字設為監聽模式,準備接受客戶請求
listen(socksrv, gc_maxlengthofqueue) ;
// 等待客戶請求到來;當請求到來後,接受連線請求,返回乙個對應於此次連線的套接字.
sockaddr_in addrclient ;
int len = sizeof (sockaddr) ;
while (1)
// 關閉套接字.
closesocket(socksrv) ;
wsacleanup() ;
std ::cin.get() ;
return 0;
}
71 基於UDP協議的服務端
server.py 1 可靠性 tcp協議是可靠協議 對方必須恢復乙個ack確認訊息,才會將自己的這端端資料從記憶體中刪除 udp協議不可靠 2 有無鏈結 tcp有鏈結,udp無連線 3 傳輸資料的效率 udp更高 4 粘包問題 udp協議稱之為資料報協議,每次傳送都是乙個完整的資料報,乙個傳送唯一...
基於UDP的服務端 客戶端
udp套接字的特點 udp提供的是不可靠的傳輸服務。如果只考慮可靠性tcp要優於udp,但是udp的結構要比tcp更簡潔。udp不會傳送ack的應答資訊,也不會像seq那樣給資料分配序號。因此,udp效能有時比tcp高出很多。程式設計實現簡單。可靠性雖然不及tcp,但也不會像想象中那麼頻繁的資料損毀...
基於 XMPP協議的即時訊息服務端簡單實現
伺服器端xmppseverconnection類事件 在流開始時觸發,一般是最初的響應流 streamparser.onstreamstart new streamhandler streamparser onstreamstart 在流結束時觸發,一般是傳送並關閉套接字連線streamparser...