이 문서에서는 서버 소켓 및 클라이언트 소켓에 대한 작업 시퀀스를 나란히 보여 줍니다. 소켓은 개체를 사용 CArchive 하므로 반드시 스트림 소켓입니다.
Stream Socket Communication에 대한 작업 시퀀스
개체를 CSocketFile 생성하는 시점까지 다음 시퀀스는 둘 다 CAsyncSocketCSocket에 대해 정확합니다(몇 가지 매개 변수 차이점 포함). 이 시점부터 시퀀스는 전적으로 CSocket를 위한 것입니다. 다음 표에서는 클라이언트와 서버 간의 통신을 설정하기 위한 일련의 작업을 보여 줍니다.
서버와 클라이언트 간의 통신 설정
| 서버 | 클라이언트 |
|---|---|
// construct a socketCSocket sockSrvr; |
// construct a socketCSocket sockClient; |
// create the SOCKETsockSrvr.Create(nPort);1,2 |
// create the SOCKETsockClient.Create( );2 |
// start listeningsockSrvr.Listen( ); |
|
// seek a connectionsockClient.Connect(strAddr, nPort);3,4 |
|
// construct a new, empty socketCSocket sockRecv;// accept connectionsockSrvr.Accept( sockRecv ); 5 |
|
// construct file objectCSocketFile file(&sockRecv); |
// construct file objectCSocketFile file(&sockClient); |
// construct an archiveCArchive arIn(&file, CArchive::load);-또는- CArchive arOut(&file, CArchive::store);- 또는 둘 다 - |
// construct an archiveCArchive 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 |
여기서 nPort 는 포트 번호입니다. 포트에 대한 자세한 내용은 Windows 소켓: 포트 및 소켓 주소를 참조하세요.
클라이언트가 연결할 수 있도록 서버는 항상 포트를 지정해야 합니다.
Create호출은 때때로 주소를 지정하기도 합니다. 클라이언트 쪽에서 MFC에 사용 가능한 포트를 사용하도록 요청하는 기본 매개 변수를 사용합니다.여기서 nPort 는 포트 번호이고 strAddr 은 컴퓨터 주소 또는 IP(인터넷 프로토콜) 주소입니다.
컴퓨터 주소는 "ftp.microsoft.com", "microsoft.com" 등의 여러 형식을 사용할 수 있습니다. IP 주소는 "점선 번호" 형식 "127.54.67.32"를 사용합니다. 이 함수는
Connect주소가 점선 번호인지 확인합니다(네트워크에서 숫자가 유효한 컴퓨터인지는 확인하지 않지만). 그렇지 않은Connect경우 다른 양식 중 하나의 컴퓨터 이름을 가정합니다.서버 쪽에서 호출
Accept할 때 새 소켓 개체에 대한 참조를 전달합니다. 이 개체를 먼저 생성해야 하지만,Create를 호출하지 마십시오. 이 소켓 개체가 범위를 벗어나면 연결이 닫힙니다. MFC는 새 개체를 SOCKET 핸들에 연결합니다. 표시된 대로 스택 또는 힙에서 소켓을 생성할 수 있습니다.보관 파일과 소켓 파일은 범위를 벗어나면 닫힙니다. 또한 소켓 개체의 소멸자는 개체가 범위를 벗어나거나 삭제될 때 소켓 개체에 대한 Close 멤버 함수를 호출합니다.
시퀀스에 대한 추가 정보
앞의 표에 표시된 호출 시퀀스는 스트림 소켓에 대한 것입니다. 연결이 없는 데이터그램 소켓에는 CAsyncSocket::Connect, Listen 및 Accept 호출이 필요하지 않습니다(필요에 따라 사용할 Connect수 있지만). 대신, 클래스 CAsyncSocket를 사용한다면, 데이터그램 소켓은 CAsyncSocket::SendTo 및 ReceiveFrom 멤버 함수를 사용합니다. (Connect을 데이터그램 소켓과 함께 사용할 경우, Send 및 Receive도 사용합니다.) 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