Как упомянул
kotenok gav, если Вы добавите в тэг <form> атрибут action с адресом сервера, то туда введенные данные и пойдут. Этим адресом может быть URL (URI) или ip-адрес. Например, если Вы хотите поиграться с этим внутри своего компьютера, таким ip-адресом может быть 127.0.0.1 (внутренний интерфейс, который позволяет программам общаться на одном и том же компьютере между собой).
Например, можно написать
Код:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Кнопка</title>
</head>
<body>
<form action="http://127.0.0.1:8888">
<p><input name="login"></p>
<p><input type="submit"></p>
</form>
</body>
</html>
где 8888 — это номер порта, на котором Ваш игровой сервер слушает входящие сообщения.
Ниже код локального сервера на языке C, который слушает порт 8888, принимает одно сообщение до 2 кБ и закрывается.
Код:
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <locale.h>
int main()
{
setlocale(LC_ALL,"ru_RU.UTF-8");
int tcpSock, conn;
socklen_t clilen;
char buffer[2048];
struct sockaddr_in serv_addr, cli_addr;
ssize_t n;
tcpSock = socket(PF_INET, SOCK_STREAM, 0);
if (tcpSock < 0)
{
fprintf(stderr, u8"Ошибка открытия сокета\n");
exit(1);
}
memset((void *) &serv_addr, '\0', sizeof serv_addr);
memset((void *) &cli_addr, '\0', sizeof cli_addr);
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
serv_addr.sin_port = htons(8888);
int optionEnable = 1;
setsockopt(tcpSock, SOL_SOCKET, SO_REUSEADDR, &optionEnable, sizeof optionEnable);
setsockopt(tcpSock, SOL_SOCKET, TCP_NODELAY, &optionEnable, sizeof optionEnable);
if (bind(tcpSock, (struct sockaddr *) &serv_addr, sizeof serv_addr) < 0)
{
fprintf(stderr, u8"Ошибка связывания сокета\n");
exit(1);
}
listen(tcpSock,5);
clilen = sizeof(cli_addr);
conn = accept(tcpSock, (struct sockaddr *) &cli_addr, &clilen);
if (conn < 0)
{
fprintf(stderr, u8"Ошибка принятия соединения\n");
exit(1);
}
char responseBody[] = u8"<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Успех</title></head><body><p>Вход осуществлен</p></body></html>";
size_t bodyLength = strlen(responseBody);
char responseHead[224] = "HTTP/1.1 200 OK\nContent-Length: %zu\nContent-Type: text/html\nConnection: Closed\n\n";
size_t headLength = strlen(responseHead);
if ((bodyLength / 1000000) > 0 || headLength > 139)
{
fprintf(stderr, u8"Слишком длинное сообщение\n");
exit(1);
}
snprintf(responseHead, headLength + 5, responseHead, bodyLength);
strcat(responseHead, responseBody);
memset(buffer, '\0', 2048);
n = read(conn, buffer, 2048);
if (n < 0)
{
fprintf(stderr, u8"Ошибка чтения с сокета\n");
exit(1);
}
for(int i = 0; i < n; ++i)
if(!buffer[i]) buffer[i] = '\n';
printf(u8"Текст полученного сообщения:\n%s\n", buffer);
n = write(conn, responseHead, strlen(responseHead));
if (n < 0)
{
fprintf(stderr, u8"Ошибка посылки ответа через сокет\n");
exit(1);
}
shutdown(conn, 2);
return 0;
}