我還是讓我的周圍指針頭之類的,所以這裏去發...類型轉換結構的數組(指針的?),以通過Winsock
- 每個客戶端發送的位置播放器正確到服務器。
- 在服務器上的數據然後被放入一個結構數組(或指向結構?)。該陣列的數據也被證實是正確的。
- 然後服務器意味着將該陣列中的所有數據發回給每個玩家
- 我希望能夠將數組從服務器發送到客戶端(並且再次返回),因爲它是方法我想把我的頭腦理解爲一些(或者指向結構的指針數組),例如,子彈和射擊的數組或其他東西。
- 我並不擔心目前或優化代碼的帶寬,是後話,當我明白這一切更好:)
基本上我已經創建了一個結構爲我的球員: -
struct PlayerShip
{
unsigned int health;
unsigned int X;
unsigned int Y;
};
然後我創建了一個陣列(從朋友的指導),讓我來訪問這些結構的數據(和它們強制類型轉換爲需要)(我認爲)
PlayerShip *playerArray[serverMaxClients];
for (int i = 0; i < serverMaxClients; i++)
{
playerArray[i] = new PlayerShip;
ZeroMemory(playerArray[i],sizeof(PlayerShip));
}
I RECV從所有連接的播放器的數據並將其饋送到陣列
for (int slotIndex = 0; slotIndex < serverMaxClients; slotIndex++)
{
char szIncoming[1500];
ZeroMemory(szIncoming,1500);
int connectionStatus = recv(clientSocketArray[slotIndex], (char*)szIncoming,sizeof(szIncoming),0);
playerDataTemp = (PlayerShip*)szIncoming;
playerArray[slotIndex]->X = playerDataTemp->X;
playerArray[slotIndex]->Y = playerDataTemp->Y;
}
打印出該陣列,所有的數據是正確的。
所以下一步就是將數據發送回客戶端。我試着改變變量爲引用和/或指針(我仍然沒有那個頓悟的時刻,其中指針和引用突然變得有意義),或者值不正確。 (下面的情況下,當前輸出不正確的值)
for (int i = 0; i < serverMaxClients; i++)
{
char* outgoing = (char*)playerArray;
if (clientSlotTaken[i] == true)
{
send(clientSocketArray[i],outgoing,sizeof(playerArray),0);
}
int *valueCheck;
valueCheck = (int*)outgoing;
cout << "VALUE CHECK " << valueCheck << "\n";
delete outgoing;
}
的「值檢測」我期待爲「100」的應該是100播放器1的健康被髮送到服務器的前面。
UPDATE
Okie現在我開始讓我的頭周圍多一點。
playerArray是指向結構體的指針數組。所以我不想將數組中的原始數據發送給客戶端。我想將結構的數據發送給玩家。
所以我猜我必須有一些代碼創建一個char數組,我用所有玩家結構中的數據填充。
我嘗試了以下,但...
char outgoing[120];
PlayerShip *dataPopulator;
dataPopulator = &outgoing[0]; //Start at the begining of the array
for (int i=0; i < serverMaxClients; i++)
{
*dataPopulator = playerArray[i];
dataPopulator++;
}
我收到以下錯誤
- 在分配無法轉換 '的char *' 到 'PlayerShip *' |
- 在'* dataPopulator = playerArray [i]'中'operator ='不匹配。
由於Joriki,這幫助我瞭解多一點,但我仍然有很長的路要走:\仍然可以通過大量的網頁,嘗試解釋指針和閱讀等
只是測試你的變化隨時請教一下指針更一般的問題,如果我理解正確的話,服務器通過Send()命令一次只發送一個playerShip結構體。我希望能夠將整個陣列發送回每個客戶端。上面的for循環應該將數組發送到每個連接的客戶端。 ValueChecked的工作,謝謝:) – ChiggenWingz 2011-02-06 04:30:20