V dnešním světě hrají počítačové sítě důležitou roli v oblasti přenosu dat. Je to téma, které by měl znát každý programátor. V počítačové síti je programování socketů jedním z nejdůležitějších témat ve světě programování. V tomto tématu se zabýváme programováním socketů a různými metodami programování socketů, které jsou implementovány v C++.
V C++ je programování soketů metodou, která kombinuje dva nebo více uzlů navzájem přes síť, takže uzly mohou sdílet data bez jakékoli ztráty dat. V tomto spojení jeden uzel naslouchá jednomu portu, který je připojen k určité IP adrese. Když klient dosáhne serveru, server vytvoří posluchač soketu.
Co je to zásuvka?
Pojďme pochopit zásuvku na příkladu v reálném čase. Zásuvka je typ média, které zajišťuje spojení mezi dvěma zařízeními. Zásuvka může být buď nabíječka telefonu, která zajišťuje spojení mezi zásuvkou a telefonem, nebo telefonem a tímto notebookem. Pomocí zásuvky jsou k místní síti připojeny různé aplikace s různými porty. Pokaždé, když je soket vytvořen, server specifikuje program a tento program specifikuje soket a adresu domény.
Soket je typ mechanismu, který se používá k výměně dat mezi různými procesy. Zde jsou tyto procesy přítomny buď v různých zařízeních, nebo ve stejném zařízení, které je připojeno přes síť. Jakmile je spojení pro soket vytvořeno, lze data odesílat oběma směry a pokračovat, dokud jeden z koncových bodů spojení neuzavře.
Postup v komunikaci klient-server
Existují určité postupy, které musíme dodržovat, abychom navázali komunikaci klient-server. Ty jsou následující.
Fáze pro vytvoření serverového soketu
Existuje několik fází, ve kterých můžeme vytvořit soket pro server. Ty jsou následující.
převod int na řetězec
Co je připojení?
Spojení je typ vztahu mezi dvěma stroji, kde jsou dva software o sobě navzájem známé. Tyto dva software vědí, jak navázat spojení mezi sebou; jinými slovy, můžeme říci, že tyto dva software vědí, jak posílat bity po síti. Spojení soketu znamená, že oba stroje by měly znát všechny informace mezi sebou, jako je telefonní číslo, IP adresa a TCP port.
Soket je typ objektu, který je podobný souboru, který umožňuje programu přijmout příchozí připojení a umožnit mu odesílat nebo přijímat příchozí připojení. Je to také typ zdroje přiřazeného k procesu serveru.
Server může vytvořit soket pomocí funkce socket(). Tento socket nelze sdílet s žádným jiným procesorem.
Fáze pro klienta
- Zásuvka, na které lze data vzájemně komunikovat.
- Vyrovnávací paměť úložiště může ukládat data o adrese, jako je addr_of_data a addr_of_buffer.
- Zabývá se velikostí vyrovnávací paměti, jako je len_of_data a len_of_buffer.
- Zabývá se příznakem, který říká, jak budou data odeslána.
Kroky k vytvoření připojení v zásuvce
Naváže spojení mezi různými klienty a serverem. Ale jak klient, tak server zvládnou soketové připojení. Každý proces musí vytvořit připojení pro svůj vlastní soket.
Kroky spojené s vytvořením soketu na straně klienta jsou následující:
- Vytváří soket pomocí systémového volání socket().
- Poté se musíme spojit s adresou soketu serveru pomocí volání system().
- Poté musíme data odeslat a přijmout. Můžeme to udělat různými způsoby. můžeme provést tuto funkci read() a write().
Kroky spojené s vytvořením soketu na straně serveru jsou následující:
- Nejprve vytvoří soket pomocí systémového volání socket().
- Poté sváže soket s adresou pomocí systémového volání bind(). Adresa se skládá z čísla portu pro serverový soket v hostitelském počítači.
- Poté naslouchá na spojení pomocí systémového volání naslouchání ().
- Poté server přijme příchozí spojení pomocí systémového volání accept(). Blokuje také všechny příchozí příkazy, dokud není klient připojen k serveru.
- Poté se spustí proces odesílání a přijímání dat.
Připojení více klientů bez multithreadingu
Existují různé příklady, ve kterých vidíme, jak se jeden uživatel může připojit k serveru. V dnešním programovacím světě je k serveru připojeno více uživatelů s různými sokety.
Toho lze dosáhnout různými způsoby. Jedním z nich je multithreading. Pomocí multithreadingu toho můžeme dosáhnout. Vícevláknový proces můžeme implementovat pomocí funkce select().
binární strom v Javě
Příklad:
Kód pro klienta:
// 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)>