다음을 통해 공유


Windows 소켓: 작업 순서

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

Stream Socket Communication에 대한 작업 시퀀스

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

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

서버 Client
// 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수 있지만). 대신 클래스CAsyncSocket를 사용하는 경우 데이터그램 소켓은 및 ReceiveFrom 멤버 함수를 CAsyncSocket::SendTo 사용합니다. (데이터그램 소켓과 함께 사용하는 Connect 경우 사용 SendReceive.) CArchive 데이터그램에서는 작동하지 않으므로 소켓이 데이터그램인 경우 보관 파일과 함께 사용하지 CSocket 마세요.

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

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

참고 항목

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