@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:порт.

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

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

Похожие вопросы