Тема для меня новая, так что могу глупить в очевидных вещах.
Вообщем, задумал я с сайта переслать некоторые данные на другой сервер, там их обработать и вернуть. Как обычно, ничего не получилось. Тогда решил сделать задачу менее глобальной.
Поднял на локальной машине Wamp-server и кое-как насобирал скудную инфу(как мне показалось) по сетевым подключениям в PB. В итоге, я кое-как написал сетевой сервер, вот он, голубчик:
EnableExplicit
Define ServerPort.i = 8081
Define ClientID.i
Define *Buffer
Define Response$
Procedure.s ProcessData(Data$)
; Здесь буду обрабатывать полученные данные
ProcedureReturn UCase(Data$) ; а пока просто буду возвращать все в верхнем регистре
EndProcedure
OpenConsole()
PrintN("Server started on port " + Str(ServerPort))
*Buffer = AllocateMemory(65536) ; Выделяем память здесь, 65536- максимально возможный буфер
If CreateNetworkServer(15, ServerPort)
PrintN("Network server created successfully.")
Repeat
ClientID = NetworkServerEvent(15)
If ClientID > 0
Select ClientID
Case #PB_NetworkEvent_Data
If *Buffer
If ReceiveNetworkData(ClientID, *Buffer, 65536) > 0 ; <--- вот тут лезет Invalid memory access (read error at address 2) при попытке заслать данные на сервер
PokeB(*Buffer + 65536, 0) ; Null-terminate the string
Response$ = PeekS(*Buffer, -1, #PB_UTF8)
PrintN("Received: " + Response$)
Response$ = ProcessData(Response$)
SendNetworkString(ClientID, "HTTP/1.1 200 OK" + #CRLF$)
SendNetworkString(ClientID, "Content-Type: text/plain" + #CRLF$)
SendNetworkString(ClientID, "Content-Length: " + Str(Len(Response$)) + #CRLF$ + #CRLF$)
SendNetworkString(ClientID, Response$)
EndIf
Else
PrintN("Failed to allocate memory.")
EndIf
Case #PB_NetworkEvent_Disconnect
PrintN("Client disconnected: " + Str(ClientID))
EndSelect
EndIf
ForEver
Else
PrintN("Failed to create server.")
EndIf
FreeMemory(*Buffer)
CloseConsole()
Сервер запускается, я пытаюсь проверить его, набирая в браузере (при запущенном Wamp) http://127.0.0.1:8081/ и моментально мой сервер падает с ошибкой, что в строке
If ReceiveNetworkData(ClientID, *Buffer, 65536) > 0
Invalid memory access (read error at address 2)
Что у меня не так?
Вместо port 8081 ставил наобум 6500, эффект тот же.
Отредактировано Goga (25.07.2024 17:29:41)