No mundo de hoje, as redes de computadores desempenham um papel importante no campo da transferência de dados. É um assunto que todo programador deve conhecer. Na rede de computadores, a programação de soquetes é um dos tópicos mais importantes no mundo da programação. Neste tópico, discutiremos a programação de soquete e os diferentes métodos de programação de soquete que são implementados em C++.
Em C++, a programação de soquete é um método que combina dois ou mais nós entre si em uma rede para que os nós possam compartilhar os dados sem qualquer perda de dados. Nesta conexão, um nó escuta uma porta que está conectada a um endereço IP específico. Quando o cliente chega ao servidor, o servidor cria o ouvinte de soquete.
O que é um soquete?
Vamos entender sobre o soquete falando no exemplo em tempo real. Um soquete é um tipo de meio que fornece uma conexão entre dois dispositivos. A tomada pode ser um carregador de telefone que fornece a conexão entre a tomada e o telefone ou entre o telefone e o laptop. Com a ajuda de um soquete, diferentes aplicativos são conectados à rede local com diferentes portas. Cada vez que o soquete é criado, o servidor especifica o programa, e esse programa especifica o soquete e o endereço do domínio.
matriz java dinâmica
O soquete é um tipo de mecanismo usado para trocar dados entre diferentes processos. Aqui, esses processos estão presentes em dispositivos diferentes ou no mesmo dispositivo conectado em uma rede. Depois que a conexão para o soquete for criada, os dados poderão ser enviados em ambas as direções e continuarão até que um dos terminais feche a conexão.
Procedimento na comunicação cliente-servidor
Existem alguns procedimentos que devemos seguir para estabelecer a comunicação cliente-servidor. São os seguintes.
Estágios para criação de soquete de servidor
Existem alguns estágios pelos quais podemos criar o soquete para o servidor. São os seguintes.
O que é uma conexão?
Uma conexão é um tipo de relacionamento entre duas máquinas em que os dois softwares se conhecem. Esses dois softwares sabem como estabelecer uma conexão entre si; ou seja, podemos dizer que esses dois softwares sabem enviar os bits pela rede. Uma conexão do soquete significa que as duas máquinas devem conhecer todas as informações entre si, como número de telefone, endereço IP e porta TCP.
pandas criando dataframe
Um soquete é um tipo de objeto semelhante ao arquivo que permite ao programa aceitar a conexão de entrada e enviar ou receber a conexão de entrada. Além disso, é um tipo de recurso atribuído ao processo do servidor.
O servidor pode criar o soquete com a ajuda de socket(). Este soquete não pode ser compartilhado com nenhum outro processador.
Etapas para o cliente
- O soquete no qual os dados podem ser comunicados entre si.
- O buffer de armazenamento pode armazenar dados sobre o endereço, como addr_of_data e addr_of_buffer.
- Lida com o tamanho do buffer, como len_of_data e len_of_buffer.
- Trata-se da flag que diz como os dados serão enviados.
Passos para estabelecer a conexão no soquete
Estabelece uma conexão entre os diferentes clientes e o servidor. Mas tanto o cliente quanto o servidor podem lidar com a conexão do soquete. Cada processo deve estabelecer uma conexão para seu próprio soquete.
As etapas envolvidas no estabelecimento de um soquete no lado do cliente são as seguintes:
- Ele cria um soquete com a ajuda de uma chamada de sistema socket().
- Então temos que nos conectar ao endereço do soquete do servidor com a ajuda de uma chamada system().
- Então temos que enviar e receber os dados. Podemos fazer isso de várias maneiras. podemos fazer esta função read() e write().
As etapas envolvidas no estabelecimento de um soquete no lado do servidor são as seguintes:
while e faça loop while em java
- Primeiro ele cria um soquete com a ajuda de uma chamada de sistema socket().
- Em seguida, ele vincula o soquete a um endereço com a ajuda da chamada de sistema bind(). Um endereço consiste em um número de porta para o soquete do servidor na máquina host.
- Em seguida, ele escuta a conexão com a ajuda da chamada de sistema listen().
- Em seguida, o servidor aceita a conexão de entrada com a ajuda da chamada de sistema accept(). Ele também bloqueia todos os comandos recebidos até que um cliente esteja conectado a um servidor.
- Em seguida, inicia-se o processo de envio e recebimento de dados.
Conectando vários clientes sem multithreading
Existem vários exemplos nos quais vemos como um único usuário pode se conectar ao servidor. No mundo da programação atual, vários usuários estão conectados ao servidor com soquetes diferentes.
Existem várias maneiras de conseguir isso. Um deles é o multithreading. Com a ajuda do multithreading, podemos conseguir isso. Podemos implementar um processo multithreading com a ajuda da função select().
Exemplo:
Código para o cliente:
// Client side C/C++ program to demonstrate Socket // programming #include #include #include #include #include #define PORT 8080 int main(int argc, char const* argv[]) { int sock = 0, valread, client_fd; struct sockaddr_in serv_addr; char* hello = 'Hello from client'; char buffer[1024] = { 0 }; if ((sock = socket(AF_INET, SOCK_STREAM, 0)) <0) 0 8080 { printf(' socket creation error '); return -1; } serv_addr.sin_family="AF_INET;" serv_addr.sin_port="htons(PORT);" convert ipv4 and ipv6 addresses from text to binary form if (inet_pton(af_inet, '127.0.0.1', &serv_addr.sin_addr) <="0)" printf( ' invalid address not supported ((client_fd="connect(sock," (struct sockaddr*)&serv_addr, sizeof(serv_addr))) 0) printf(' connection failed send(sock, hello, strlen(hello), 0); printf('hello message sent '); valread="read(sock," buffer, 1024); printf('%s ', buffer); closing the connected close(client_fd); 0; code for server: server side c c++ program demonstrate programming #include #define port int main(int argc, char const* argv[]) server_fd, new_socket, valread; struct sockaddr_in address; opt="1;" addrlen="sizeof(address);" buffer[1024]="{" }; char* hello="Hello from server" ; creating file descriptor ((server_fd="socket(AF_INET," sock_stream, 0)) perror('socket failed'); exit(exit_failure); forcefully attaching (setsockopt(server_fd, sol_socket, so_reuseaddr | so_reuseport, &opt, sizeof(opt))) perror('setsockopt'); address.sin_family="AF_INET;" address.sin_addr.s_addr="INADDR_ANY;" address.sin_port="htons(PORT);" (bind(server_fd, sockaddr*)&address, sizeof(address)) perror('bind (listen(server_fd, 3) perror('listen'); ((new_socket="accept(server_fd," (socklen_t*)&addrlen)) perror('accept'); send(new_socket, close(new_socket); listening shutdown(server_fd, shut_rdwr); pre> <p> <strong>Compiling:</strong> </p> <img src="//techcodeview.com/img/c-tutorial/33/socket-programming-c-c-2.webp" alt="Socket Programming in C/C++"> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/c-tutorial/33/socket-programming-c-c-3.webp" alt="Socket Programming in C/C++"> <h2>Uses of Socket Programming</h2> <p>Socket programs are used to communicate between various processes, usually running on different systems. It is mostly used to create a client-server environment. This post provides the various functions used to create the server and client program and an example program.</p> <p>In the example, the client program sends a file name to the server, and the server sends the contents of the file back to the client. Socket programming usually pertains to basic communication protocols like TCP/UDP and raw sockets like ICMP. These protocols have a small communication overhead when compared to underlying protocols such as HTTP/DHCP/SMTP etc.</p> <p> <strong>Some of the basic data communications between the client and server are:</strong> </p> <ul> <li>File Transfer: Sends name and gets a file.</li> <li>Web Page: Sends URL and gets a page.</li> <li>Echo: Sends a message and gets it back.</li> </ul> <h2>Disadvantages</h2> <ul> <li>C++ can establish communication only with the machine requested and not with any other machine on the network.</li> <li>Sockets allow only raw data to be sent. This means that the client and server need mechanisms to interpret the data.</li> </ul> <hr></0)>