다음을 통해 공유


Windows 소켓: 작업 시퀀스

이 문서에서는 서버 소켓 및 클라이언트 소켓에 대한 작업 시퀀스를 나란히 보여 줍니다. 소켓은 개체를 사용 CArchive 하므로 반드시 스트림 소켓입니다.

Stream Socket Communication에 대한 작업 시퀀스

개체를 CSocketFile 생성하는 시점까지 다음 시퀀스는 둘 다 CAsyncSocketCSocket에 대해 정확합니다(몇 가지 매개 변수 차이점 포함). 이 시점부터 시퀀스는 전적으로 CSocket를 위한 것입니다. 다음 표에서는 클라이언트와 서버 간의 통신을 설정하기 위한 일련의 작업을 보여 줍니다.

서버와 클라이언트 간의 통신 설정

서버 클라이언트
// construct a socket

CSocket sockSrvr;
// construct a socket

CSocket sockClient;
// create the SOCKET

sockSrvr.Create(nPort);1,2
// create the SOCKET

sockClient.Create( );2
// start listening

sockSrvr.Listen( );
// seek a connection

sockClient.Connect(strAddr, nPort);3,4
// construct a new, empty socket

CSocket sockRecv;

// accept connection

sockSrvr.Accept( sockRecv ); 5
// construct file object

CSocketFile file(&sockRecv);
// construct file object

CSocketFile file(&sockClient);
// construct an archive

CArchive arIn(&file, CArchive::load);

-또는-

CArchive arOut(&file, CArchive::store);

- 또는 둘 다 -
// construct an archive

CArchive arIn(&file, CArchive::load);

-또는-

CArchive arOut(&file, CArchive::store);

- 또는 둘 다 -
// use the archive to pass data:

arIn >> dwValue;

-또는-

arOut << dwValue;6
// use the archive to pass data:

arIn >> dwValue;

-또는-

arOut << dwValue;6
  1. 여기서 nPort 는 포트 번호입니다. 포트에 대한 자세한 내용은 Windows 소켓: 포트 및 소켓 주소를 참조하세요.

  2. 클라이언트가 연결할 수 있도록 서버는 항상 포트를 지정해야 합니다. Create 호출은 때때로 주소를 지정하기도 합니다. 클라이언트 쪽에서 MFC에 사용 가능한 포트를 사용하도록 요청하는 기본 매개 변수를 사용합니다.

  3. 여기서 nPort 는 포트 번호이고 strAddr 은 컴퓨터 주소 또는 IP(인터넷 프로토콜) 주소입니다.

  4. 컴퓨터 주소는 "ftp.microsoft.com", "microsoft.com" 등의 여러 형식을 사용할 수 있습니다. IP 주소는 "점선 번호" 형식 "127.54.67.32"를 사용합니다. 이 함수는 Connect 주소가 점선 번호인지 확인합니다(네트워크에서 숫자가 유효한 컴퓨터인지는 확인하지 않지만). 그렇지 않은 Connect 경우 다른 양식 중 하나의 컴퓨터 이름을 가정합니다.

  5. 서버 쪽에서 호출 Accept 할 때 새 소켓 개체에 대한 참조를 전달합니다. 이 개체를 먼저 생성해야 하지만, Create를 호출하지 마십시오. 이 소켓 개체가 범위를 벗어나면 연결이 닫힙니다. MFC는 새 개체를 SOCKET 핸들에 연결합니다. 표시된 대로 스택 또는 힙에서 소켓을 생성할 수 있습니다.

  6. 보관 파일과 소켓 파일은 범위를 벗어나면 닫힙니다. 또한 소켓 개체의 소멸자는 개체가 범위를 벗어나거나 삭제될 때 소켓 개체에 대한 Close 멤버 함수를 호출합니다.

시퀀스에 대한 추가 정보

앞의 표에 표시된 호출 시퀀스는 스트림 소켓에 대한 것입니다. 연결이 없는 데이터그램 소켓에는 CAsyncSocket::Connect, ListenAccept 호출이 필요하지 않습니다(필요에 따라 사용할 Connect수 있지만). 대신, 클래스 CAsyncSocket를 사용한다면, 데이터그램 소켓은 CAsyncSocket::SendToReceiveFrom 멤버 함수를 사용합니다. (Connect을 데이터그램 소켓과 함께 사용할 경우, SendReceive도 사용합니다.) CArchive은/는 데이터그램과 함께 작동하지 않으므로, 소켓이 데이터그램일 경우에는 CSocket을/를 보관 파일과 함께 사용하지 마십시오.

CSocketFile 은 모든 CFile기능을 지원하지 않습니다. CFile 소켓 통신에 의미가 없는 멤버 Seek를 사용할 수 없습니다. 이 때문에 일부 기본 MFC Serialize 함수는 .와 CSocketFile호환되지 않습니다. 이는 특히 CEditView이라는 클래스에 해당합니다. CEditView에 연결된 CArchive 개체를 통해 CSocketFile 데이터를 CEditView::SerializeRaw로 직렬화하려고 해서는 안 됩니다. 대신 CEditView::Serialize를 사용하십시오 (문서화되지 않음). SerializeRaw 함수는 파일 개체에 Seek가 지원하지 않는 여러 함수(CSocketFile 등)가 있을 것으로 예상합니다.

자세한 내용은 다음을 참조하세요.

참고하십시오

MFC에서의 Windows 소켓
CSocket 클래스
CAsyncSocket::Create
CAsyncSocket::Close