[РЕШЕНО] [SOCKET] Отправка файла на удалённый сервер

Nova

Simple Project
Сообщения
262
Реакции
28
Как отправить файл с игрового сервера на удалённый сервер через Socket?
Интересует сам POST запрос и как происходит обработка файла в OnSocketReceive().
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #4
@Nova, файл отправляется абсолютно точно так же.
Отличается лишь Content-Type.
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #6
В ресиве Вы уже получаете ответ сервера на запрос.
Если уверены, что запрос составлен корректно, его реализовывать не надо. В противном случае, можно предохраниться и сделать обработку ответа.
 

Nova

Simple Project
Сообщения
262
Реакции
28
В ресиве Вы уже получаете ответ сервера на запрос.
Если уверены, что запрос составлен корректно, его реализовывать не надо. В противном случае, можно предохраниться и сделать обработку ответа.
Немного запутался...
Допустим, есть файл file1.txt на игровом сервере по пути addons/sourcemod/data/. Мне нужно отправить этот файл по адресу example.com/data/.
Где должен выполняться запрос: в самом плагине или на удалённом сервере?
 

Nova

Simple Project
Сообщения
262
Реакции
28
Добился "хорошего" ответа от сервера, но текст всё равно не отправляется.
PHP:
#pragma semicolon 1
#include <socket>

new Handle:g_hPostSocket;

new String:g_sSocketHost[] = "example.com",
    String:g_sHostFile[] = "file1.php", // В этом файле содержится слово text
    String:g_sSendData[] = "example_text";

public OnPluginStart()
{
    g_hPostSocket = SocketCreate(SOCKET_TCP, OnSocketError);
    SocketConnect(g_hPostSocket, OnSocketConnected, OnSocketReceive, OnSocketDisconnected, g_sSocketHost, 80);
}

public OnSocketConnected(Handle:socket, any:arg)
{
    decl String:sBuffer[256];
    Format(sBuffer, sizeof(sBuffer), "POST /%s HTTP/1.1\r\nHost: %s\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: %d\r\n\r\n%s\r\n\r\n", g_sHostFile, g_sSocketHost, strlen(g_sSendData), g_sSendData);
    SocketSend(socket, sBuffer);
}

public OnSocketReceive(Handle:socket, String:receiveData[], const dataSize, any:arg)
{
    PrintToServer("%s", receiveData);
}

public OnSocketDisconnected(Handle:socket, any:arg)
{
    CloseHandle(socket);
    g_hPostSocket = INVALID_HANDLE;
}
HTML:
POST /file1.php HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 32

example_text
HTML:
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Sun, 27 Jan 2019 12:35:39 GMT
Content-Type: text/html
Content-Length: 4
Connection: keep-alive
X-Powered-By: PHP/5.4.45-pl0-gentoo

text
 

panikajo

Участник
Сообщения
866
Реакции
231
а здесь ( String:g_sHostFile[] = "file1.php", // В этом файле содержится слово text) точно .php? Не txt? Вы ведь с сервера отсылаете насколько я понял.
 

Nova

Simple Project
Сообщения
262
Реакции
28
Последнее редактирование:

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #12
@Nova, потому что Вы изначально неправильно отправляете файл. Посмотрите, как любой HTTP-клиент отправляет их.
На примере браузера Firefox и загрузки аватарки на этот форум:
upload_2019-1-27_17-54-23.png
 

Nova

Simple Project
Сообщения
262
Реакции
28
@Nova, потому что Вы изначально неправильно отправляете файл. Посмотрите, как любой HTTP-клиент отправляет их.
На примере браузера Firefox и загрузки аватарки на этот форум:
Посмотреть вложение 38416
В прикреплённом примере я пытаюсь отправить текст, а не файл.
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #14
@Nova, а принимающий скрипт писали Вы, надеюсь? Если да - покажите код получения данных из него, и примерно можно будет показать, как отправлять текст.
 

Nova

Simple Project
Сообщения
262
Реакции
28
@Nova, а принимающий скрипт писали Вы, надеюсь? Если да - покажите код получения данных из него, и примерно можно будет показать, как отправлять текст.
Вот! Новая информация появилась. Нужен принимающий скрипт. Об этом я не знал.
 
Сверху Снизу