PDA

Просмотр полной версии : SF | Способ передачи данных по сети


ANZR
09.04.2021, 17:22
Хаюшки

Это вопрос для шарющих.

Те, кто интересовался работой сокетов на c++ и знают, что это такое

У меня к вам вопрос

Как можно передать данные между игроками/пользователями через интернет, т.к либ для работы с сокетом я не нашел в SF, а методы, что работают в обычном проекте тут не прокатывают.

memir
09.04.2021, 18:54
Все там прокатывает... Опиши конкретнее, в чем ошибка

ANZR
09.04.2021, 19:07
Все там прокатывает... Опиши конкретнее, в чем ошибка


Крч, подключаю либу с сокетом

Вроде пишет, что она есть, даже ее открывает, но при создании той же самой структуры, говорит, что она не объявлена

memir
09.04.2021, 19:46
Крч, подключаю либу с сокетом
Вроде пишет, что она есть, даже ее открывает, но при создании той же самой структуры, говорит, что она не объявлена


покажи код и что пишет студия

ANZR
09.04.2021, 19:52
https://i.imgur.com/iJTOyTk.png

Vintik
09.04.2021, 23:39
А можно в виде кода, а не скриншота?

ANZR
10.04.2021, 01:05
Сокеты к проекту так же подключал?

C++:






#include
#include
#pragma comment(lib, "WS2_32.lib")





Да, точно также

Я же сказал, что они вроде-бы определились но выводят такую ошибку

ANZR
10.04.2021, 01:05
А можно в виде кода, а не скриншота?


Окс

с++:






#include
#include "main.h"
#pragma comment(lib, "ws2_32.lib")
#include
#include
#include
#pragma warning(disable: 4996)
SOCKET Connection
;
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
bool
CALLBACK
outcomingData
(
stRakNetHookParams
*
params
)
// определение callback-функции, которая будет вызвана при отправке какого либо пакета
{
if
(
params
->
packetId
==
93
)
{
UINT32 dColor
;
UINT32 messageLen
;
params
->
bitStream
->
ResetReadPointer
(
)
;
params
->
bitStream
->
Read
(
dColor
)
;
params
->
bitStream
->
Read
(
messageLen
)
;
char
*
msg
=
new
char
[
messageLen
]
;
params
->
bitStream
->
Read
(
msg
,
messageLen
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
msg
)
;
params
->
bitStream
->
ResetReadPointer
(
)
;
}
return
true
;
// успешно завершаем отправку пакета
}
;
void
__stdcall
mainloop
(
)
{
static
bool
initialized
=
false
;
if
(
!
initialized
)
{
if
(
GAME
&&
GAME
->
GetSystemState
(
)
==
eSystemState
::
GS_PLAYING_GAME
&&
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
{
initialized
=
true
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"SAMPFUNCS Plugin loaded."
)
;
SF
->
getRakNet
(
)
->
registerRakNetCallback
(
RakNetScriptHookType
::
RAKHOOK_TYPE_INCOMING_RPC
,
outcomingData
)
;
// регистрируем RakNet callback
WSAData wsaData
;
WORD DLLVersion
=
MAKEWORD
(
2
,
1
)
;
if
(
WSAStartup
(
DLLVersion
,
&
wsaData
)
!=
0
)
{
std
::
cout

getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"Error connected to server!"
)
;
}
else
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"Connected!"
)
;
}
}
}
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
if
(
dwReasonForCall
==
DLL_PROCESS_ATTACH
)
SF
->
initPlugin
(
mainloop
,
hModule
)
;
return
TRUE
;
}

ALF
10.04.2021, 01:30
Окс

с++:






#include
#include "main.h"
#pragma comment(lib, "ws2_32.lib")
#include
#include
#include
#pragma warning(disable: 4996)
SOCKET Connection
;
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
bool
CALLBACK
outcomingData
(
stRakNetHookParams
*
params
)
// определение callback-функции, которая будет вызвана при отправке какого либо пакета
{
if
(
params
->
packetId
==
93
)
{
UINT32 dColor
;
UINT32 messageLen
;
params
->
bitStream
->
ResetReadPointer
(
)
;
params
->
bitStream
->
Read
(
dColor
)
;
params
->
bitStream
->
Read
(
messageLen
)
;
char
*
msg
=
new
char
[
messageLen
]
;
params
->
bitStream
->
Read
(
msg
,
messageLen
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
msg
)
;
params
->
bitStream
->
ResetReadPointer
(
)
;
}
return
true
;
// успешно завершаем отправку пакета
}
;
void
__stdcall
mainloop
(
)
{
static
bool
initialized
=
false
;
if
(
!
initialized
)
{
if
(
GAME
&&
GAME
->
GetSystemState
(
)
==
eSystemState
::
GS_PLAYING_GAME
&&
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
{
initialized
=
true
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"SAMPFUNCS Plugin loaded."
)
;
SF
->
getRakNet
(
)
->
registerRakNetCallback
(
RakNetScriptHookType
::
RAKHOOK_TYPE_INCOMING_RPC
,
outcomingData
)
;
// регистрируем RakNet callback
WSAData wsaData
;
WORD DLLVersion
=
MAKEWORD
(
2
,
1
)
;
if
(
WSAStartup
(
DLLVersion
,
&
wsaData
)
!=
0
)
{
std
::
cout

getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"Error connected to server!"
)
;
}
else
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"Connected!"
)
;
}
}
}
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
if
(
dwReasonForCall
==
DLL_PROCESS_ATTACH
)
SF
->
initPlugin
(
mainloop
,
hModule
)
;
return
TRUE
;
}






#include - удали

#include "main.h" - после всех инклюдов

ANZR
10.04.2021, 01:31
#include - удали
#include "main.h" - после всех инклюдов


Спасибо, а с чем это связано

ALF
10.04.2021, 01:35
Спасибо, а с чем это связано



Cannot include both files (WinSock2, Windows.h) (https://www.blast.hk/redirect/aHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIxNDAxNTAz)

I'm having a problem including both files. Now, I know I need to either include Winsock2 first, then windows.h, or simply put: #define WIN32_LEAN_AND_MEAN but, I'm still having problems I have a ...

stackoverflow.com