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 |
여기서 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
수 있지만). 대신 클래스CAsyncSocket
를 사용하는 경우 데이터그램 소켓은 및 ReceiveFrom
멤버 함수를 CAsyncSocket::SendTo
사용합니다. (데이터그램 소켓과 함께 사용하는 Connect
경우 사용 Send
및 Receive
.) CArchive
데이터그램에서는 작동하지 않으므로 소켓이 데이터그램인 경우 보관 파일과 함께 사용하지 CSocket
마세요.
CSocketFile 은 모든 CFile
기능을 지원하지 않습니다. CFile
소켓 통신에 의미가 없는 멤버 Seek
를 사용할 수 없습니다. 이 때문에 일부 기본 MFC Serialize
함수는 .와 CSocketFile
호환되지 않습니다. 이는 특히 클래스의 경우입니다 CEditView
. 대신 사용(문서화되지 않음)을 사용하여 CEditView::SerializeRaw
CEditView::Serialize
개체에 연결된 개체를 CSocketFile
통해 CArchive
데이터를 직렬화 CEditView
해서는 안 됩니다. SerializeRaw 함수는 파일 개체에 지원되지 않는 함수(예: Seek
)가 CSocketFile
있어야 합니다.
자세한 내용은 다음을 참조하세요.
참고 항목
MFC의 Windows 소켓
CSocket 클래스
CAsyncSocket::Create
CAsyncSocket::Close