소켓 서버 예제

augusztus 2, 2019 5:24 du. Közzétette cccccccccccccc

클라이언트를 실행하려면 서버가 실행 중인 호스트의 이름과 서버가 연결을 수신 대기 중인 포트 번호라는 두 개의 인수를 전달해야 합니다. 다음은 위에서 설명한 서버에 연결하는 명령줄입니다. 그러나 sel.unregister()를 먼저 호출하는 것을 잊지 마십시오. pranav 나는 단일 클라이언트 코드를 사용하지만 동일한 문제가 있었다. 따라서 char 배열을 null로 초기화한 후 서버 및 클라이언트의 모든 코드에서 수행할 수 있습니다. 나를 위해 일했다. 클라이언트와 서버를 실행하여 클라이언트가 어떻게 행동하는지 확인하고 무슨 일이 일어나고 있는지 검사해 보겠습니다. 이 코드 자체에는 몇 가지 심각한 문제가 있습니다. 당신이 이것에 서버를 구축하려고하면 그것은 시간이 지남에 중단됩니다, 장기적으로 사용하지 마십시오. 다음 코드에는 dostuff(int sockfd)라는 더미 함수가 있습니다.

이 함수는 연결이 설정된 후 연결을 처리하고 클라이언트가 요청하는 서비스를 제공합니다. 위에서 보았듯이, 연결이 설정되면 양쪽 끝은 읽기와 쓰기를 사용하여 다른 쪽 끝으로 정보를 보낼 수 있으며, 앞뒤로 전달되는 정보의 세부 사항은 여기에 관심이 없습니다. „실제” 서버를 작성하려면 main() 함수를 기본적으로 변경하지 않으며 서비스를 제공하는 모든 코드가 dostuff()에 있을 것입니다. 서버에서 이 방법을 사용하면 대부분의 경우 소켓이 정상이고 네트워크 문제가 없는 경우 항상 쓰기가 가능하다는 것이 장점입니다. 다소 „숨겨져 있음”이지만 Message 클래스가 연결당 하나의 메시지만 처리한다는 점을 감안할 때 허용되는 절충안이라고 생각합니다. 응답을 작성한 후에는 서버가 수행할 수 있는 방법이 없습니다. 그것은 그것의 일을 완료했습니다. 메시지 콘텐츠를 데이터 변수에 저장한 후 process_request()는 수신 버퍼에서 메시지를 제거합니다. 그런 다음 콘텐츠 형식이 JSON인 경우 이를 디코딩하고 디Serial화합니다. 그렇지 않은 경우 이 예제 응용 프로그램의 경우 이진 요청이라고 가정하고 콘텐츠 형식을 인쇄합니다. 서버가 여러 동시 연결을 처리 할 수 있도록, 우리는 위의 코드에서 다음과 같은 변경을 – 위의 서버를 실행하고 여러 클라이언트에서 연결하고 그들 모두를 처리합니다. 선택, 폴링 등과 같이 여러 클라이언트를 처리하는 다른 방법이 있습니다.

우리는 다른 기사에서 그들에 대해 이야기 할 것이다. 그런 다음 위의 코드 예제를 연습하고 즐길 수 있습니다. echoserver.c:88:1: 오류: 입력 포트노 끝에 예상 된 선언 또는 문은 서버 연결을 허용 하는 포트 번호를 저장 합니다. 이 예제 응용 프로그램에서 응용 프로그램 계층 프로토콜은 헤더를 UTF-8 인코딩이 있는 유니코드 텍스트로 정의합니다. 메시지의 실제 콘텐츠인 메시지 페이로드의 경우 필요한 경우 바이트 순서를 수동으로 교환해야 합니다. 이 경우 TCPServer가 모든 서버 요구 사항을 처리하기 때문에 특별한 서버 클래스가 필요하지 않습니다. 한 가지 중요한 차이점이 있습니다. 서버에서 수신한 바이트 수를 추적하여 연결 측을 닫을 수 있습니다.

서버가 이를 감지하면 연결 측면도 닫힙습니다. 트래픽 캡처를 실행하면 응용 프로그램이 네트워크에서 어떻게 실행되는지 보고 응용 프로그램이 보내고 받는 내용과 빈도 및 양에 대한 증거를 수집할 수 있습니다. 또한 클라이언트 또는 서버가 연결을 닫거나 중단하거나 응답을 중지하는 경우에도 볼 수 있습니다. 이 정보는 문제를 해결할 때 매우 유용할 수 있습니다.

Kategória: Egyéb kategória

Írta: Gabor