ÄÚÈÝ·¢²¼¸üÐÂʱ¼ä : 2025/11/4 19:38:12ÐÇÆÚÒ» ÏÂÃæÊÇÎÄÕµÄÈ«²¿ÄÚÈÝÇëÈÏÕæÔĶÁ¡£
3¡¢µÈ´ý½ÓÊÕÊý¾Ý£¨recvfrom£©¡£ 4¡¢¹Ø±ÕÌ×½Ó×Ö¡£ ¿Í»§¶Ë£¨·¢ËͶˣ©³ÌÐò£º 1¡¢´´½¨Ì×½Ó×Ö£¨socket£©¡£ 2¡¢Ïò·þÎñÆ÷·¢ËÍÊý¾Ý£¨sendto£©¡£ 3¡¢¹Ø±ÕÌ×½Ó×Ö¡£ ·þÎñÆ÷¶Ë´úÂ룺
££i nclude
WORD wVersionRequested; WSADATA wsaData; int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { return; }
if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 ) { WSACleanup( ); return; }
SOCKET sockSrv=socket(AF_INET,SOCK_DGRAM,0); SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY); addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(6000);
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); SOCKADDR_IN addrClient; int len=sizeof(SOCKADDR); char recvBuf[100];
recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&addrClient,&len); printf(\closesocket(sockSrv); WSACleanup();
}
¿Í»§¶Ë´úÂ룺
££i nclude
WORD wVersionRequested; WSADATA wsaData; int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { return; }
if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 ) { WSACleanup( ); return; }
SOCKET sockClient=socket(AF_INET,SOCK_DGRAM,0); SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr(\addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(6000);
sendto(sockClient,\(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); closesocket(sockClient); WSACleanup(); }
UDPµÄ²»ÔÙ¼Ó×¢ÊÍÁË¡£ÒòΪËü±ÈTCPµÄ¼òµ¥¶àÁË¡£
3.»ùÓÚ×Ö·û½çÃæµÄÁÄÌì³ÌÐò£¬ÓõÄÊÇUDPʽÌ×½Ó×Ö¡£´úÂëÂÔ¡£ 4.ÈçºÎÌí¼ÓÐµĹ¤³Ì£¿
Ê×ÏÈÑ¡ÔñÖÐBuild¹¤¾ßÀ¸£¬È»ºóÔÚ¹¤³Ì¹ÜÀíÆ÷Éϵã»÷ÓÒ¼ü£¬Ñ¡ÔñÔö¼ÓÐµĹ¤³Ì¼´¿É¡£
µÚ15¿Î¶àÏß³ÌÓëÍøÂç±à³Ì 1.¶àÏ߳̽éÉÜ£¬ÂÔ
2.Ò»¸ö¼òµ¥µÄ¶àÏ̳߳ÌÐò
MSNDÖвÎÊý[in]ºÍ[out]µÄº¬ÒåҪעÒâ ££i nclude
DWORD WINAPI Fun2Proc( LPVOID lpParameter // thread data );
int index=0; int tickets=100;
HANDLE hMutex;»¥³â¶ÔÏóµÄ¾ä±ú void main() {
HANDLE hThread1; HANDLE hThread2;
hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);´´½¨Ïß³Ì1 hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);´´½¨Ïß³Ì2
CloseHandle(hThread1);¹Ø±ÕÏ̵߳ľä±ú£¬ÎªÊ²Ã´Òª¹Ø±Õ£¿Ëü½«Ï̵߳ÄʹÓüÆÊý¼õ1
CloseHandle(hThread2);ÕâÑùµ±Ï߳̽áÊøÊ±£¬Ïß³ÌÄں˶ÔÏó±»ÊÍ·Å£¬·ñÔòÖ»Óе±½ø³Ì½áÊø£¬²ÅÊÍ·ÅÏ̵߳ÄÄں˶ÔÏó /*while(index++<1000)
cout<<\thread is running\
//hMutex=CreateMutex(NULL,TRUE,NULL);½«µÚ¶þ¸ö²ÎÊýÉèΪtrueºó£¬»¥³â¶ÔÏóµÄ¼ÆÊý¼Ó1 hMutex=CreateMutex(NULL,TRUE,\´Ë¶Î´úÂë¿ÉÒÔÈÃϵͳֻһ·ÝʵÀýÔÚÔËÐУ¡ if(hMutex) {
if(ERROR_ALREADY_EXISTS==GetLastError()) {
cout<<\instance can run!\return; } }
WaitForSingleObject(hMutex,INFINITE);´Ë´úÂëÒ²½«»¥³â¶ÔÏóµÄ¼ÆÊý¼Ó1 ReleaseMutex(hMutex);ËùÒÔÒªÊÍ·ÅÁ½´Î»¥³â¶ÔÏó ReleaseMutex(hMutex); Sleep(4000);˯Ãß4000ºÁÃë
// Sleep(10); }
DWORD WINAPI Fun1Proc( LPVOID lpParameter // thread data ) {
/*while(index++<1000)
cout<<\is running\/*while(TRUE) {
//ReleaseMutex(hMutex);
WaitForSingleObject(hMutex,INFINITE);µÈ´ý»¥³â¶ÔÏóµÄµ½À´£¬µ½À´ºó½«»¥³â¶ÔÏóµÄ¼ÆÊý¼Ó1 if(tickets>0) { Sleep(1);
cout<<\sell ticket : \} else break;
ReleaseMutex(hMutex);ÊÍ·Å»¥³â¶ÔÏ󣬽«Æä¼ÆÊý¼õ1£¬ÕâÑù¿ÉÒÔ±£Ö¤£¬ÕâÁ½¾ä»°Ö®¼äµÄ´úÂ룡µÄÖ´ÐÐÁ¬ÐøÐÔ£¡ }*/
WaitForSingleObject(hMutex,INFINITE); cout<<\is running\return 0; }
DWORD WINAPI Fun2Proc( LPVOID lpParameter // thread data ) {
/*while(TRUE) {
//ReleaseMutex(hMutex);
WaitForSingleObject(hMutex,INFINITE); if(tickets>0) { Sleep(1);
cout<<\sell ticket : \
} else break;
ReleaseMutex(hMutex); }*/
WaitForSingleObject(hMutex,INFINITE); cout<<\is running\return 0; }
3.¶àÏß³ÌÁÄÌì³ÌÐò
1.¼ÓÔØÌ×½Ó×Ö¿âÔÚInitInstance()ÖУ¬µ÷ÓÃAfxSocketInit(),´Ëʱ¿ÉÒÔ²»¼ÓÔØ¿âÎļþ£¬µ«Òª¼ÓÈëAfxsock.h\Í·Îļþ
2.ÔÚCChatDlgÖд´½¨³ÉÔ±±äÁ¿m_socket,È»ºóÔö¼ÓÒ»¸ö³ÉÔ±º¯Êý£¬IniSocket(),ÔÚÆäÖÐÍê³Ém_socketµÄ³õʼ»¯ºÍ°ó¶¨¡£ÔÚOnInitDialogÖе÷ÓÃInitSocketÍê³É³õʼ»¯¹¤×÷¡£
3.¶¨ÒåÒ»¸ö½á¹¹Ì壬°üº¬Á½¸ö²ÎÊý£¬sockºÍhwnd£¬ÔÚOnInitDialog()Öгõʼ»¯Õâ¸ö½á¹¹ÌåµÄ¶ÔÏó¡£
4.´´½¨Ò»¸öỊ̈߳¬CreateThread(),Ð뽫Ï̺߳¯ÊýRecvProc¶¨ÒåΪ¾²Ì¬µÄ»òÕßÈ«¾Öº¯Êý¡£ ::PostMessage()Íê³É½«ÊÕµ½µÄÊý¾Ý·¢Ë͸ø¶Ô»°¿ò¡£ÓÃ×Ô¶¨ÒåµÄÏûÏ¢£¬×Ô¶¨ÒåµÄÏûÏ¢ÈçºÎд£¿ÒÔǰ˵¹ý£¬²Î¿¼ÏÂÃæµÄ´úÂë¡£×¢ÒâÒª½«EDitBoxµÄMultiLineÊôÐÔÑ¡ÉÏ¡£ ÔÚChatDlg.hÖÐ#define WM_RECVDATA WM_USER+1
afx_msg void OnRecvData(WPARAM wParam,LPARAM lParam); ÔÚChatDlg.cppÖÐ
ON_MESSAGE(WM_RECVDATA,OnRecvData) È»ºóʵÏÖÕâ¸öº¯Êý
void CChatDlg::OnRecvData(WPARAM wParam,LPARAM lParam) {
CString str=(char*)lParam; CString strTemp;
GetDlgItemText(IDC_EDIT_RECV,strTemp); str+=\str+=strTemp;
SetDlgItemText(IDC_EDIT_RECV,str); }
×îºóÔÚDWORD WINAPI CChatDlg::RecvProc(LPVOID lpParameter) Öе÷Óà ::PostMessage(hwnd,WM_RECVDATA,0,(LPARAM)tempBuf); //²»ÄÜÓÃSendMessage() 4.¶Ô·¢ËͰ´Å¦µÄÏìÓ¦´úÂ룺 void CChatDlg::OnBtnSend()