遊戲開發之網路篇 04 Socket簡單伺服器搭建

2021-10-02 14:07:12 字數 2349 閱讀 4306

本篇我會使用vs的控制台程式搭建乙個本地的簡單的伺服器,伺服器內容很簡單,由於考慮到客戶端使用了非同步來處理連線的,那麼我會在伺服器使用同步監聽和連線的方法來作為服務端使用,結合微軟提供poll檢測機制來提供乙個不會阻塞的服務端來不斷的偵聽和接收客戶端的連線和傳送資料,這裡面的傳送資料僅僅為**客戶端傳送過來的訊息內容,不做過多的任何其他的訊息處理,記住,這個服務端僅僅是個demo,這裡我花點時間去搭建乙個可以供後面部落格一直使用的伺服器,裡面的內容,可能你讀到這裡有點不理解,但是相信你讀完後面的內容再回頭看看這篇的內容應該理解起來不難的.如果你致力於客戶端的研究,本節內容可以跳過

using system;

using system.collections.generic;

using system.text;

using system.threading.tasks;

using system.net;

using system.net.sockets;

using system.linq;

using system.reflection;

namespace test

//select

socket.

select

(checkread,

null

,null

,1000);

//檢查可讀物件

foreach

(socket s in checkread)

else}}

#endregion

}private

static

bool

readclientfd

(socket clientfd)

catch

(socketexception ex)

; mei.

invoke

(null

, ob)

; clientfd.

close()

; clients.

remove

(clientfd)

; console.

writeline

("receive socketexception "

+ ex.

tostring()

);}//客戶端關閉

if(count <=0)

; mei.

invoke

(null

, ob)

; clientfd.

close()

; clients.

remove

(clientfd)

; console.

writeline

("socket close !!!");

return

false;}

#region 粘包問題處理

//顯示

string recvstr = system.text.encoding.utf8.

getstring

(state.readbuff,

2, count -2)

; console.

writeline

("receive "

+ recvstr)

;//廣播給其他的客戶端

byte

sendbytes =

newbyte

[count]

; array.

copy

(state.readbuff,

0, sendbytes,

0, count)

;foreach

(var cs in clients.values)

#endregion

return

true;}

private

static

void

readlistenfd

(socket listenfd)

}}

using system;

using system.collections.generic;

using system.net.sockets;

using system.text;

using system.threading.tasks;

namespace test

}

2D網路遊戲開發(網路篇)(二)

2d網路遊戲開發 網路篇 二 在上一章中,我簡單的講解了什麼是raknet,它有那些好處。在這一章中,我們將講解如何在ide中配置raknet,並將測試乙個程式。由於raknet的作者使用的是vc net,所以在作者的主頁上,他詳細地講解了如何在vc net中配置raknet,如果你使用的vc ne...

2D網路遊戲開發(網路篇)(六)

2d網路遊戲開發 網路篇 六 在前面的章節中,我們實現了乙個簡單的聊天室。今天,我們仍然要圍繞這個主題,但採取別的方法,這個方法很有用,應該說是整個網路引擎的關鍵,它就是 rpc remote procedure calls 翻譯成中文就可以理解成 遠端功能呼叫 通常情況下,你傳送乙個資訊,你必須實...

2D網路遊戲開發(網路篇)(九)

2d網路遊戲開發 網路篇 九 前言 轉眼之間,就來到了這一系列教程的第九課來了,事先宣告一下,這些文章大多 於raknet的官方 或者例程。如果你覺得我的文章有地方看不懂,那也請你原諒我,因為我也和你一樣,也是重頭學習這個函式庫。在這種情況下,我還是請你閱讀它官方 上的。位元流簡介 描述 bitst...