이 문서에서는 서버 소켓 및 클라이언트 소켓에 대한 작업 시퀀스를 나란히 보여 줍니다. 소켓은 개체를 사용 CArchive
하므로 반드시 스트림 소켓입니다.
Stream Socket Communication에 대한 작업 시퀀스
개체를 CSocketFile
생성하는 시점까지 다음 시퀀스는 둘 다 CAsyncSocket
CSocket
에 대해 정확합니다(몇 가지 매개 변수 차이점 포함). 이 시점부터 시퀀스는 전적으로 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 |
여기서 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