C/Visual C - Sockets (C++ Builder 5.0)

 
Vista:

Sockets (C++ Builder 5.0)

Publicado por Cristian (2 intervenciones) el 05/08/2001 19:50:51
Hola, soy inexperto en C++. Tengo un Server y 3 Sockets, existe alguna instruccion que retorne/identifique qué Socket hizo el envio y/o en qué conexion? ( serversocket->Socket->Connections[ ? ] ).
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Sockets (C++ Builder 5.0)

Publicado por Alejandro (913 intervenciones) el 04/10/2024 23:50:36
Hola, Cristian.

En C++, si estás utilizando la biblioteca de sockets estándar (por ejemplo, la biblioteca de sockets de Berkeley), no hay una instrucción directa que te permita identificar qué socket hizo el envío o en qué conexión se encuentra. Sin embargo, puedes lograr esto de otras maneras.

Una forma común de identificar qué socket hizo el envío es asociar cada socket con un identificador único, como un número o una cadena. Puedes utilizar esta información para identificar el socket en el lado del servidor cuando recibas datos. Por ejemplo, puedes enviar el identificador junto con los datos y luego utilizarlo para determinar qué socket hizo el envío.

Aquí hay un ejemplo simplificado de cómo podrías hacerlo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// Crear un mapa para asociar identificadores con sockets
std::map<std::string, int> socketMap;
 
// Asignar un identificador único a cada socket
std::string socket1Id = "Socket1";
std::string socket2Id = "Socket2";
std::string socket3Id = "Socket3";
 
// Agregar los sockets al mapa
socketMap[socket1Id] = socket1;
socketMap[socket2Id] = socket2;
socketMap[socket3Id] = socket3;
 
// Recibir datos en el servidor
char buffer[1024];
int bytesRead = recv(clientSocket, buffer, sizeof(buffer), 0);
 
// Determinar qué socket hizo el envío
std::string senderSocketId;
for (const auto& pair : socketMap) {
    if (pair.second == clientSocket) {
        senderSocketId = pair.first;
        break;
    }
}
 
// Utilizar el identificador para identificar el socket
if (senderSocketId == socket1Id) {
    // El envío fue realizado por el Socket1
} else if (senderSocketId == socket2Id) {
    // El envío fue realizado por el Socket2
} else if (senderSocketId == socket3Id) {
    // El envío fue realizado por el Socket3
}

En este ejemplo, se utiliza un mapa para asociar identificadores únicos con los sockets. Luego, cuando se reciben datos en el servidor, se busca en el mapa el identificador correspondiente al socket que hizo el envío.

Recuerda que este es solo un ejemplo simplificado y que puedes adaptarlo según tus necesidades específicas. Además, ten en cuenta que existen otras bibliotecas y frameworks de C++ que pueden proporcionar funcionalidades adicionales para identificar el socket que hizo el envío.

Espero que esta información te sea útil.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar