tcp send 예제

우리는 readn을 호출하여 인수를 읽고 합계를 계산하고 저장하고 writen을 호출하여 결과 구조를 다시 보냅니다. 이전 섹션에서 설명한 대로 서버 호스트가 충돌할 때 클라이언트가 서버로 데이터를 적극적으로 보내지 않으면 클라이언트는 서버 호스트가 충돌했다는 것을 인식하지 못하는 것입니다. 다음 단계가 수행됩니다: 3방향 핸드셰이크가 완료되고 연결이 설정된 다음 클라이언트 TCP가 RST(재설정)를 보냅니다. 서버 측에서는 연결이 TCP에 의해 큐에 대기되어 서버 프로세스가 RST가 도착할 때 수락을 호출할 때까지 대기합니다. 언젠가 서버 프로세스 호출이 수락됩니다. sscanf는 두 인수를 텍스트 문자열에서 바이너리로 변환하고 구조를 서버로 보내기 위해 writen을 호출합니다. 우리는 응답을 읽고, printf를 사용하여 결과를 인쇄하기 위해 readn을 호출합니다. 이 테스트에서는 개인 네트워크에서 다른 호스트를 사용하고 있습니다. 수신자 IP 주소는 192.168.1.1이고 발신자는 192.168.1.1입니다. 보낸 사람 프로그램에서 해당 주소를 변경한 다음 다시 빌드합니다. 수신기가 모든 인터페이스에서 수신대기 중입니다.

클라이언트가 서버와 통신할 수 있도록 서버를 올바른 주소에 바인딩하는 것이 중요합니다. 이전 예제에서는 모두 `localhost`를 IP 주소로 사용했으며, 이 주소는 동일한 서버에서 실행되는 클라이언트에 대한 연결을 제한합니다. gethostname()에서 반환된 값과 같은 서버의 공용 주소를 사용하여 다른 호스트가 연결할 수 있도록 합니다. 이 예제는 명령줄 인수를 통해 지정된 주소에서 수신하도록 에코 서버를 수정합니다. 다음 예제에서는 클라이언트와 서버 간에 연결을 설정한 다음 서버 호스트가 충돌하고 재부팅한다고 가정합니다. 이를 시뮬레이션하는 가장 쉬운 방법은 연결을 설정하고, 네트워크에서 서버연결을 끊고, 서버 호스트를 종료한 다음 다시 부팅한 다음 서버 호스트를 네트워크에 다시 연결하는 것입니다. 클라이언트가 서버 호스트가 종료되는 것을 원하지 않습니다. 첫 번째 client.write 외에도 사용자 조회수가 입력 된 후 mother client.write를 어떻게 보내나요? client.write 정말 서버에 데이터를 보내지 않습니다., 그것은 단지 클라이언트의 동일한 소켓을 통해 기록. 예, 메모리 누설로 버그를 수정하지만 여러 클라이언트 기능을 사용하지 않도록 설정하므로이 예제는 실제로 작동하지 않습니다 :( 나는 아직이 문제를 해결할 수 없다. 이전 예제에서는 C에서 소켓 프로그래밍의 기본 사항에 대해 배웠습니다.

이 예제에서는 기본 ECHO 클라이언트와 서버를 빌드합니다. 여기에 표시된 서버/클라이언트는 TCP 소켓 또는 SOCK_STREAM을 사용합니다. 이 자습서의 예제에서는 TCP 프로토콜을 사용 하 여 인터넷 도메인에서 소켓을 사용 합니다. 서버 호스트가 충돌할 때 발생하는 일을 시뮬레이션하려면 다른 호스트에서 클라이언트와 서버를 실행해야 합니다. 그런 다음 서버를 시작하고, 클라이언트를 시작하고, 클라이언트에 줄을 입력하여 연결이 가동되었는지 확인하고, 네트워크에서 서버 호스트를 연결 해제하고, 클라이언트에서 다른 줄을 입력합니다. 또한 클라이언트가 데이터를 보낼 때 연결할 수 없는 서버 호스트의 시나리오도 다룹니다(즉, 연결이 설정된 후 일부 중간 라우터가 다운됨). 3. 다음 첫 번째 스크린 샷은 수신기 샘플 출력을 보여주고 두 번째는 보낸 자입니다. strlen은 종료 null 문자를 생략하는 c 문자열의 길이를 반환하므로 쓰기는 문자열없이 문자열을 보냅니다. 수신 버퍼에서 잘 수신하지만 버퍼에서 읽으려고 하면 임의의 null 문자를 찾을 때까지 버퍼의 시작 부분에서 모든 문자를 읽습니다.

위의 서버를 실행하고 여러 클라이언트에서 연결하면 버퍼를 모두 처리합니다. 선택, 폴링 등과 같이 여러 클라이언트를 처리하는 다른 방법이 있습니다. 우리는 다른 기사에서 그들에 대해 이야기 할 것이다. 그런 다음 위의 코드 예제를 연습하고 즐길 수 있습니다. char sendbuf[1024] = “보낸 자의 테스트 문자열입니다.”; 느린 시스템 호출의 다른 예는 파이프 및 터미널 장치의 읽기 및 쓰기입니다.

02 August, 2019
Posted in Uncategorized

Author: wolff