오늘날 세계에서 컴퓨터 네트워크는 데이터 전송 분야에서 중요한 역할을 합니다. 프로그래머라면 누구나 알아야 할 주제이다. 컴퓨터 네트워크에서 소켓 프로그래밍은 프로그래밍 세계에서 가장 중요한 주제 중 하나입니다. 이 주제에서는 소켓 프로그래밍과 C++에서 구현되는 다양한 소켓 프로그래밍 방법에 대해 논의합니다.
정렬 알고리즘 병합 정렬
C++에서 소켓 프로그래밍은 두 개 이상의 노드를 네트워크를 통해 서로 결합하여 노드가 데이터 손실 없이 데이터를 공유할 수 있도록 하는 방법입니다. 이 연결에서 하나의 노드는 특정 IP 주소에 연결된 하나의 포트를 수신합니다. 클라이언트가 서버에 도달하면 서버는 소켓 수신기를 만듭니다.
소켓이란 무엇입니까?
실시간 예제를 통해 소켓에 대해 알아봅시다. 소켓은 두 장치 간의 연결을 제공하는 매체 유형입니다. 소켓은 소켓과 전화기 또는 전화기와 해당 노트북 사이의 연결을 제공하는 전화기 충전기일 수 있습니다. 소켓을 사용하면 다양한 애플리케이션이 다양한 포트를 통해 로컬 네트워크에 연결됩니다. 소켓이 생성될 때마다 서버는 프로그램을 지정하고 해당 프로그램은 소켓과 도메인 주소를 지정합니다.
소켓은 서로 다른 프로세스 간에 데이터를 교환하는 데 사용되는 일종의 메커니즘입니다. 여기서 이러한 프로세스는 다른 장치 또는 네트워크를 통해 연결된 동일한 장치에 존재합니다. 소켓에 대한 연결이 생성되면 데이터는 양방향으로 전송될 수 있으며 끝점 중 하나가 연결을 닫을 때까지 계속됩니다.
클라이언트-서버 통신 절차
클라이언트-서버 통신을 설정하려면 따라야 하는 몇 가지 절차가 있습니다. 이는 다음과 같습니다.
서버 소켓 생성 단계
서버용 소켓을 생성할 수 있는 몇 가지 단계가 있습니다. 이는 다음과 같습니다.
연결이란 무엇입니까?
연결은 두 소프트웨어가 서로에 대해 알려진 두 시스템 간의 관계 유형입니다. 이 두 소프트웨어는 서로 연결하는 방법을 알고 있습니다. 즉, 이 두 소프트웨어는 네트워크를 통해 비트를 보내는 방법을 알고 있다고 말할 수 있습니다. 소켓 연결은 두 시스템이 전화번호, IP 주소 및 TCP 포트와 같은 서로 간의 모든 정보를 알아야 함을 의미합니다.
소켓은 프로그램이 들어오는 연결을 수락하고 들어오는 연결을 보내거나 받을 수 있도록 하는 파일과 유사한 개체 유형입니다. 또한 서버의 프로세스에 할당된 자원의 일종이다.
서버는 소켓()의 도움으로 소켓을 생성할 수 있습니다. 이 소켓은 다른 프로세서와 공유할 수 없습니다.
자바의 char + int
클라이언트를 위한 단계
- 데이터를 서로 통신할 수 있는 소켓입니다.
- 스토리지 버퍼는 addr_of_data 및 addr_of_buffer와 같은 주소에 대한 데이터를 저장할 수 있습니다.
- len_of_data 및 len_of_buffer와 같은 버퍼 크기를 처리합니다.
- 데이터가 전송되는 방법을 알려주는 플래그를 다룹니다.
소켓에서 연결을 설정하는 단계
이는 다른 클라이언트와 서버 간의 연결을 설정합니다. 그러나 클라이언트와 서버 모두 소켓 연결을 처리할 수 있습니다. 각 프로세스는 자신의 소켓에 대한 연결을 설정해야 합니다.
클라이언트 측에서 소켓을 설정하는 단계는 다음과 같습니다.
- 소켓() 시스템 호출을 사용하여 소켓을 생성합니다.
- 그런 다음 system() 호출을 사용하여 서버의 소켓 주소에 연결해야 합니다.
- 그런 다음 데이터를 보내고 받아야 합니다. 우리는 이것을 다양한 방법으로 할 수 있습니다. 우리는 read()와 write() 함수를 사용할 수 있습니다.
서버 측에서 소켓을 설정하는 단계는 다음과 같습니다.
- 먼저 소켓() 시스템 호출을 사용하여 소켓을 생성합니다.
- 그런 다음 바인딩() 시스템 호출을 사용하여 소켓을 주소에 바인딩합니다. 주소는 호스트 시스템의 서버 소켓에 대한 포트 번호로 구성됩니다.
- 그런 다음 listening () 시스템 호출을 사용하여 연결을 수신합니다.
- 그런 다음 서버는 accept() 시스템 호출을 통해 들어오는 연결을 수락합니다. 또한 클라이언트가 서버에 연결될 때까지 들어오는 모든 명령을 차단합니다.
- 그런 다음 데이터 전송 및 수신 프로세스가 시작됩니다.
멀티스레딩 없이 여러 클라이언트 연결
단일 사용자가 서버에 연결하는 방법을 보여주는 다양한 예가 있습니다. 오늘날의 프로그래밍 세계에서는 여러 사용자가 서로 다른 소켓을 사용하여 서버에 연결됩니다.
이를 달성하는 방법에는 여러 가지가 있습니다. 그 중 하나가 멀티스레딩입니다. 멀티스레딩의 도움으로 이를 달성할 수 있습니다. select() 함수를 사용하여 멀티스레딩 프로세스를 구현할 수 있습니다.
예:
클라이언트용 코드:
// 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)>