tcp 소켓 프로그래밍 예제

오늘날 소켓 API에서 사용하는 기본 프로토콜은 수년에 걸쳐 발전해 왔지만 새로운 프로토콜을 보았지만 낮은 수준의 API는 동일하게 유지되었습니다. 다른 연결이 영향을 받지 않도록 오류를 적절하게 처리하는 클라이언트와 서버를 원합니다. 물론, 예외가 잡히지 않으면 클라이언트 나 서버가 분노의 공에 충돌해서는 안됩니다. 이것은 우리가 지금까지 논의하지 않은 무언가이다. 예제에서 간결성과 명확성을 위해 의도적으로 오류 처리를 배제했습니다. printf (“Id 양말: %in”, (소켓_desc)); if(sid = -1) { printf(“Id 양말: %in”, (socket_desc)); 반환 0; } 수신 대기 중인 소켓, sockfd에 대한 보류 중인 연결 큐에서 첫 번째 연결 요청을 추출하고, 연결된 새 소켓을 만들고, 해당 소켓을 참조하는 새 파일 설명기를 반환합니다. 이 시점에서 클라이언트와 서버 간에 연결이 설정되고 데이터를 전송할 준비가 됩니다. 이것은 간단한 다중 연결 서버의 핵심입니다. 키는 소켓 개체(fileobj) 및 데이터 개체를 포함하는 select()에서 반환된 명명된 tuple입니다. 마스크에는 준비된 이벤트가 포함되어 있습니다. 전제 조건 – TCP를 사용하여 클라이언트와 서버 간에 연결을 만드는 경우 C에서 선택, UDP 서버-클라이언트 구현을 사용하는 C/C++, TCP 및 UDP 서버의 소켓 프로그래밍은 TCP와 같은 기능이 거의 없으며 TCP가 필요한 응용 프로그램에 적합합니다.

신뢰성이 높고 전송 시간이 상대적으로 덜 중요합니다. 그것은 HTTP, HTTP, FTP, SMTP, 텔넷과 같은 다른 프로토콜에 의해 사용된다. TCP는 지정된 순서로 데이터 패킷을 다시 정렬합니다. 전송된 데이터가 그대로 유지되고 전송된 순서와 동일한 순서로 도착한다는 절대적인 보장이 있습니다. TCP는 흐름 제어를 수행하며 사용자 데이터를 보내기 전에 소켓 연결을 설정하기 위해 세 개의 패킷이 필요합니다. TCP는 안정성 및 정체 제어를 처리합니다. 또한 오류 검사 및 오류 복구를 수행합니다. 잘못된 패킷은 원본에서 대상으로 다시 전송됩니다. void *connection_handler(보이드 *소켓_desc) { //소켓 설명자 int 양말 = *(int*)socket_desc; int read_size; 이것은 리눅스 시스템에서 c 언어로 소켓 프로그래밍에 대한 빠른 튜토리얼입니다. 여기에 표시된 코드 조각이 Windows가 아닌 Linux 시스템에서만 작동하기 때문에 “Linux”. 소켓 프로그래밍에 대한 윈도우 API는 winsock라고하고 우리는 다른 튜토리얼에서 그것을 통해 이동합니다. 다음 부분에서는 소켓을 사용하여 서버를 만드는 것을 살펴봅니다.

서버는 클라이언트의 반대로 다른 사람에게 연결하는 대신 들어오는 연결을 기다립니다. 인터넷 도메인의 소켓 주소는 호스트 컴퓨터의 인터넷 주소로 구성됩니다(인터넷의 모든 컴퓨터에는 고유한 32비트 주소(IP 주소라고도 함). 또한 각 소켓에는 해당 호스트에 포트 번호가 필요합니다. 포트 번호는 16비트 서명되지 않은 정수입니다. 낮은 숫자는 표준 서비스를 위해 유닉스에서 예약되어 있습니다. 예를 들어 FTP 서버의 포트 번호는 21입니다. 표준 서비스는 클라이언트가 주소를 알 수 있도록 모든 컴퓨터에서 동일한 포트에 있어야 합니다. 그러나 2000이상의 포트 번호는 일반적으로 사용할 수 있습니다. 예를 들어 send()는 write()와 유사하지만 일부 옵션을 지정할 수 있습니다. send()는 다음과 같이 정의됩니다: 영향을 줄 수 있는 소켓 및 바이트에 대해 언급해야 합니다.

앞서 언급했듯이 소켓을 통해 데이터를 보내고 받을 때 원시 바이트를 보내고 받는 것입니다. 이 샘플 프로그램은 표준 라이브러리 설명서의 설명서에 있는 설명서에 따라 들어오는 메시지를 수신하여 보낸 사람에게 다시 에코합니다.