Loading…

winsock2 udp 예제

제가 물어볼 질문은 “왜 C++가 아닌 C에서 이 프로그램을 작성했습니까?” 입니다. 대답은 간단합니다. 이 프로그램의 요점은 가장 작고 최신 코드를 제공하지 않는 WinSock 프로그래밍의 기본 프레임 워크를 표시하는 것입니다. 그래서 예를 들어 MFC CSocket 클래스로 프로그램을 구현하지 않기로 결정했습니다. 그러나 소스 코드는 여전히 C ++ 컴파일러로 컴파일됩니다. 소켓, 바인딩 및 sendto와 같은 기본 함수의 사용을 보여주고 싶었습니다. 원래 UNIX 시스템에서 소켓 프로그래밍을 배웠고 해당 환경에서 프로그래머가 Windows 프로그래밍에서 유사한 기능을 사용할 수있는 방법을 확인하려고합니다. 이것은 WinSock 프로그래밍 초보자를위한 기본 예제 프로그램입니다, 아마 이미 어쨌든이 모든 물건을 알고 고급 프로그래머를위한 프로그램이 아닙니다. 또한 WSAAsyncSelect() 및 WSAEventSelect()를 사용할 때 공유 소켓에 대한 알림과 관련된 몇 가지 문제에 유의하십시오.

공유 설명자 중 하나를 사용하여 이러한 호출을 실행하면 해당 등록에 사용된 설명자가 무엇이든 관계없이 소켓에 대한 이전 이벤트 등록이 취소됩니다. 예를 들어 공유 소켓은 B를 처리하는 A 및 FD_WRITE 이벤트를 처리하기 위해 FD_READ 이벤트를 제공할 수 없습니다. 두 설명자 모두에 이벤트 알림이 필요한 경우 프로세스 대신 스레드를 사용할 수 있도록 응용 프로그램 디자인을 다시 고려해야 합니다. 다음 콘솔 출력은 Visual C++ 6.0을 사용하고 공용 IP를 사용하여 다시 컴파일된 이전 클라이언트-서버 프로그램 예제입니다. 이제 줄 “———-:8888”. 포트 8888에서 수신 대기하고 있는 UDP 서버입니다. netstat 명령은 udp 서버에 연결된 클라이언트(예: ncat)에 대한 연결을 표시하지 않는다는 점에 유의해야 합니다. select() 함수를 사용하는 작업 프로그램 예제의 샘플은 다음과 같습니다.

프로젝트 이름은 UDPServerVer2입니다. 좋은 예! 그것은 간단하고 즉시 작동! 서버 프로그램의 구문은 timeserv [server_address] 포트입니다. 포트는 서버를 실행할 포트 번호입니다. 낮은 포트 번호가 다른 프로토콜에 할당될 수 있으므로 1023 이상의 포트 번호를 선택하는 것이 좋습니다. 서버_address 매개 변수는 xxx.xxx.xxx.xxx 형식으로 입력된 서버 컴퓨터의 로컬 IP 주소입니다. 이 매개 변수를 생략하면 프로그램이 자동으로 주소를 얻으려고 시도합니다. 대부분의 경우 이에이더넷 카드 및 무선 네트워킹 카드와 같이 네트워크 연결이 두 개 이상인 경우 프로그램이 잘못된 네트워크 연결을 선택할 수 있습니다. 이 경우 명령 프롬프트에 ipconfig를 입력하여 주소를 확인하고 명령줄에 입력합니다. 예를 들어 포트 5000에서 자동 로컬 주소 생성을 사용하여 프로그램을 실행하려면 timeserv 5000을 입력하고 로컬 주소가 192.168.1.1.102인 컴퓨터에서 실행하려면 timeserv 192.168.1.1000을 입력합니다.