@inq_1337

Как подключить нового пользователя к одному сокету?

Решил реализовать удаленно управление компьютером через сайт и столкнулся с проблемой.

Подключение пхп скрипта и программы я реализовал через WebSocket, который использует для соединения определенный порт и IP.

Хорошо, допустим, я подключил один пк к порту 3000, а что если пк 2, 4, 100, 500 000?

Как реализовать новое подключение, чтобы не добавлять для каждого нового пользователя новый файл с конфигурацией сервера и измененным портом?

Код который я использую, но на примере онлайн чата. Серверная часть написана на C++.

Клиент:
<?php

					$host = "0.0.0.0";
					$port = 3000;

					$message = $_REQUEST["mess"];

					set_time_limit(0);

					if(isset($_POST["btn"])){
						$sock = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
						$result = socket_connect($sock, $host, $port) or die("Could not connect toserver\n");
						socket_write($sock, $message, strlen($message)) or die("Could not send data to server\n");
					}
					socket_close($sock);

?>


Сервер:
<?php
	
	$host = "0.0.0.0";
	$port = 3000;
	
	set_time_limit(0);
	$sock = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
	$result = socket_bind($sock, $host, $port) or die("Could not bind to socket\n");

	while(true) {
		$result = socket_listen($sock, 3) or die("Could not set up socket listener\n");

		$spawn = socket_accept($sock) or die("Could not accept incoming connection\n");

		$input = socket_read($spawn, 1024) or die("Could not read input\n");
		echo $input
		$output = 'answer from the server';

		socket_write($spawn, $output, strlen ($output)) or die("Could not write output\n");
	}

	socket_close($spawn);
	socket_close($socket);

?>
  • Вопрос задан
  • 76 просмотров
Решения вопроса 1
Хорошо, допустим, я подключил один пк к порту 3000, а что если пк 2, 4, 100, 500 000?

А кто вам вообще сказал, что для нового подключения нужен новый порт?
Поучите матчасть, ну хотя бы тут.
Вот выдержка - ответ на ваш вопрос:
Connections are uniquely identified by the OS by the following 5-tuple: (local-IP, local-port, remote-IP, remote-port, protocol). If any element in the tuple is different, then this is a completely independent connection.

When a client connects to a server, it picks a random, unused high-order source port. This way, a single client can have up to ~64k connections to the server for the same destination port.


Переводя на русский, за счёт того что КЛИЕНТ при подключении выбирает рандомный порт-источник, каждый клиент может поднять около 64к соединений (по количеству свободных портов на КЛИЕНТЕ) на ОДНУ И ТУ ЖЕ пару ip:порт.

Проблемы, которую вы выдумали, не существует.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
25 апр. 2024, в 16:12
2000 руб./за проект
25 апр. 2024, в 16:08
100000 руб./за проект