這個範例碼主要是在本機建立一個server ,使用者透過socket傳送資訊給server
server再傳回使用者所需資訊
SOCKET InitSocket(void)
{
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2), &wsaData);
SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);
if (INVALID_SOCKET != sock)
{
SOCKADDR_IN sockAddr;
sockAddr.sin_family =AF_INET;
sockAddr.sin_port = htons(2000);
/*INADDR_LOOPBACK (127.0.0.1) 本地主機
INADDR_ANY (0.0.0.0) 任何可綁定位置
INADDR_BROADCAST (255.255.255.255) 任何主機 選INADDR_ANY是因為在 SOCKET連接時
萬一預設端口已經連線會自動找尋本機上的任何閒置端口*/
sockAddr.sin_addr.S_un.S_addr = INADDR_ANY;
if ( SOCKET_ERROR == bind(sock, (sockaddr FAR*)&sockAddr,sizeof(sockAddr)))
{
AfxMessageBox("Init Socket bind fail");
closesocket( sock );
return false;
}
if ( SOCKET_ERROR == listen(sock, SOMAXCONN))
{
AfxMessageBox("Init Socket bind fail");
closesocket( sock );
return false;
}
}
return sock;
}
void Server_Recv(LPVOID pParam)
{
char tsData[MAX_PATH]={NULL};
//建立socket
SOCKET sock = (SOCKET)pParam;
SOCKET Clientfd = accept(sock,0,0); //將accept這動作命名為Clientfd
fd_set fdRead = { 0 };
if ( !FD_ISSET( Clientfd, &fdRead ) )
FD_SET( Clientfd, &fdRead );
int res = select( Clientfd, &fdRead, NULL, NULL, NULL );
if ( res > 0)
{
res=recv( Clientfd, tsData, sizeof(tsData), 0);
//tsData為使用者send出的字串 在這邊做比對 用以確認是否要send回 MESSAGE
if(strncmp(tsData,"GetHiddenAreaString",19)==0)
{
//send回的字串長度為hiddenstring長度
send( Clientfd,hiddenstring, strlen(hiddenstring), 0);
}
}
}
沒有留言:
張貼留言