ÄÚÈÝ·¢²¼¸üÐÂʱ¼ä : 2025/9/20 13:40:56ÐÇÆÚÒ» ÏÂÃæÊÇÎÄÕµÄÈ«²¿ÄÚÈÝÇëÈÏÕæÔĶÁ¡£
{
// TOD Add your control notification handler code here DWORD dwIP;
((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS1))->GetAddress(dwIP); SOCKADDR_IN addrTo; addrTo.sin_family=AF_INET; addrTo.sin_port=htons(6000);
addrTo.sin_addr.S_un.S_addr=htonl(dwIP); CString strSend;
GetDlgItemText(IDC_EDIT_SEND,strSend); sendto(m_socket,strSend,strSend.GetLength()+1,0, (SOCKADDR*)&addrTo,sizeof(SOCKADDR)); SetDlgItemText(IDC_EDIT_SEND,\}
µÚ16¿Î
1.ʼþ¶ÔÏó£ºÀ´ÊµÏÖÏ̵߳Äͬ²½¡£Ó뻥³â¶ÔÏóÒ»Ñù¾ùÊôÓÚÄں˶ÔÏó¡£
µ±È˹¤ÖØÖÃÓÐÐźÅʱ£¬ËùÓÐÏ߳̾ùµÃµ½Ðźţ¬ËùÒÔ²»ÄÜÉèΪÈ˹¤ÖØÖᣴúÂë¾Í²»ÌùÁË¡£ ͨ¹ý´´½¨ÄäÃûµÄʼþ¶ÔÏó£¬Ò²¿ÉÒÔÈÃÒ»¸ö³ÌÐòÖ»ÄÜÔËÐÐÒ»¸öʵÀý¡£
2.¹Ø¼ü´úÂë¶ÎʵÏÖÏ̵߳Äͬ²½£ºÀàËÆ¹«Óõ绰ͤ£¬Ö»Óе±µç»°Í¤ÀïÃæÃ»ÈËÁË£¬ÆäËüÈ˲ſÉÒÔÔÙ½øÈ¥´òµç»°¡£ÓÃÁË4¸öº¯Êý£¬ÕâÖÖ·½·¨±È½Ï¼òµ¥£¡µ«È±µãÊÇÈç¹ûʹÓÃÁ˶àÉٹؼü´úÂëÂ룬ÈÝÒ×ÔÞ³ÉÏ̵߳ÄËÀËø
3.Ïß³ÌËÀËø£¬Óùؼü´úÂëʾÀý£¬ÓÃÁËÁ½¸öÁÙ½çÇø¶ÔÏó£¬ÊµÕ½ÖÐҪעÒâ±ÜÃâÕâÖÖ´íÎó£¡ 4.ʹÓÃÒì²½Ì×½Ó×Ö±àÐ´ÍøÂçÁÄÌìÊÒ
1)¼ÓÔØÌ×½Ó×ֿ⣬½øÐа汾ÐÉÌ£¬°üº¬Í·Îļþ£¬Á´½Ó¿âÎļþ£¬Õâ´ÎÇëʾµÄÊÇ2.2°æ±¾£¡ 2£©ÔÚÀàCChatDlgÖÐÔö¼ÓÒ»¸ö³ÉÔ±±äÁ¿m_socket,ÔÚÎö¹¹º¯ÊýÖÐÊÍ·ÅÕâ¸ö±äÁ¿ 3£©ÀûÓÃWSASocket()´´½¨Ì×½Ó×Ö£¨Êý¾Ý±¨ÀàÐ͵ÄUDPÐ͵ģ©
4£©È»ºóµ÷ÓÃWSAAsyncSelect(m_socket,m_hWnd,UM_SOCK,FD_READ)ÎªÍøÂçʼþ¶¨ÒåÏûÏ¢£¡´ËʱÈç¹û·¢ÉúFD_READÏûÏ¢£¬ÏµÍ³»á·¢ËÍUM_SOCKÏûÏ¢¸øÓ¦ÓóÌÐò£¡³ÌÐò²¢²»»á×èÈûÔÚÕâ¶ùÁË£¡
ÒÔÉÏÊÇÔÚBOOL CChatDlg::OnInitDialog()Íê³É 5£©È»ºóÍê³ÉÏûÏ¢ÏìÓ¦£¡
Í·ÎļþÖУº#define UM_SOCK WM_USER+1 afx_msg void OnSock(WPARAM,LPARAM); Ô´ÎļþÖУº
ON_MESSAGE(UM_SOCK,OnSock)
ʵÏÖÏûÏ¢ÏìÓ¦º¯Êý£ºvoid CChatDlg::OnSock(WPARAM wParam,LPARAM lParam)
{
switch(LOWORD(lParam)) {
case FD_READ: WSABUF wsabuf; wsabuf.buf=new char[200]; wsabuf.len=200; DWORD dwRead; DWORD dwFlag=0; SOCKADDR_IN addrFrom; int len=sizeof(SOCKADDR); CString str; CString strTemp; HOSTENT *pHost;
if(SOCKET_ERROR==WSARecvFrom(m_socket,&wsabuf,1,&dwRead,&dwFlag, (SOCKADDR*)&addrFrom,&len,NULL,NULL)) {
MessageBox(\½ÓÊÕÊý¾Ýʧ°Ü£¡\return; }
pHost=gethostbyaddr((char*)&addrFrom.sin_addr.S_un.S_addr,4,AF_INET); //str.Format(\˵ :%s\str.Format(\˵ :%s\str+=\
GetDlgItemText(IDC_EDIT_RECV,strTemp); str+=strTemp;
SetDlgItemText(IDC_EDIT_RECV,str); break; } } OK£¡
6£©Íê³ÉÊý¾Ý·¢Ë͵ŦÄÜ£¡ void CChatDlg::OnBtnSend() {
// TOD Add your control notification handler code here DWORD dwIP; CString strSend; WSABUF wsabuf;
DWORD dwSend; int len;
CString strHostName; SOCKADDR_IN addrTo; HOSTENT* pHost;
if(GetDlgItemText(IDC_EDIT_HOSTNAME,strHostName),strHostName==\{
((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS1))->GetAddress(dwIP); addrTo.sin_addr.S_un.S_addr=htonl(dwIP); } else {
pHost=gethostbyname(strHostName);
addrTo.sin_addr.S_un.S_addr=*((DWORD*)pHost->h_addr_list[0]); }
addrTo.sin_family=AF_INET; addrTo.sin_port=htons(6000);
GetDlgItemText(IDC_EDIT_SEND,strSend); len=strSend.GetLength();
wsabuf.buf=strSend.GetBuffer(len); wsabuf.len=len+1;
SetDlgItemText(IDC_EDIT_SEND,\
if(SOCKET_ERROR==WSASendTo(m_socket,&wsabuf,1,&dwSend,0, (SOCKADDR*)&addrTo,sizeof(SOCKADDR),NULL,NULL)) {
MessageBox(\·¢ËÍÊý¾Ýʧ°Ü£¡\return; } }
7£©Íê³É½«Ö÷»úÃûת»»ÎªIPµØÖ·µÄ¹¦ÄÜ£¬ÒÔǰ½«IPµØÖ·×ª»»ÎªÖ÷»úÃûµÄ¹¦ÄÜ ºÙºÙ£¬µ¥Ï̵߳ÄÁÄÌìÊÒ´´½¨Íê±Ï£¡ÐÔÄܲ¢Çҷdz£³öÉ«£¡
µÚ17¿Î ½ø³Ì¼äͨÐÅ ÓÐËÄÖÖ·½·¨ 1.¼ôÌù°å
a.´´½¨¸öClipBoardµÄ¶Ô»°¿òÓ¦ÓóÌÐò£¬¼ÓÁ½EditBoxºÍÁ½¸öButton·¢ËͽÓÊÕ¡£ b.¾ßÌå´úÂ룺
·¢ËͶ˴úÂ룺 if(OpenClipboard()) {
CString str; HANDLE hClip; char *pBuf; EmptyClipboard();
GetDlgItemText(IDC_EDIT_SEND,str);
hClip=GlobalAlloc(GMEM_MOVEABLE,str.GetLength()+1); pBuf=(char*)GlobalLock(hClip);½«¾ä±úת»»ÎªÖ¸Õ룡 strcpy(pBuf,str); GlobalUnlock(hClip);
SetClipboardData(CF_TEXT,hClip); CloseClipboard(); }
½ÓÊÕ¶Ë´úÂ룺 if(OpenClipboard()) {
if(IsClipboardFormatAvailable(CF_TEXT)) {
HANDLE hClip; char *pBuf;
hClip=GetClipboardData(CF_TEXT); pBuf=(char*)GlobalLock(hClip); GlobalUnlock(hClip);
SetDlgItemText(IDC_EDIT_RECV,pBuf); CloseClipboard(); } }
2.ÄäÃû¹ÜµÀ£ºÖ»ÄÜÔÚ¸¸×Ó½ø³ÌÖ®¼ä½øÐÐͨÐÅ
a.ÏȽ¨Ò»¸öParentµÄµ¥ÎĵµÓ¦ÓóÌÐò£¬Ôö¼Ó¡°´´½¨¹ÜµÀ¡±¡°¶ÁÈ¡Êý¾Ý¡±¡°Ð´ÈëÊý¾Ý¡±Èý¸ö²Ëµ¥ b.Ôö¼Ó³ÉÔ±±äÁ¿HANDLEÀàÐ͵ÄhRead,hWrite£¬³õʼ»¯±äÁ¿£¬²¢ÔÚÎö¹¹º¯ÊýÖÐÊͷžä±ú c.ÏìÓ¦²Ëµ¥´úÂ룺
void CParentView::OnPipeCreate() ²Ëµ¥¡°´´½¨¹ÜµÀ¡±´úÂë {
// TOD Add your command handler code here SECURITY_ATTRIBUTES sa; sa.bInheritHandle=TRUE;
sa.lpSecurityDescriptor=NULL;
sa.nLength=sizeof(SECURITY_ATTRIBUTES); if(!CreatePipe(&hRead,&hWrite,&sa,0)) {
MessageBox(\´´½¨ÄäÃû¹ÜµÀʧ°Ü£¡\return; }
STARTUPINFO sui;
PROCESS_INFORMATION pi;
ZeroMemory(&sui,sizeof(STARTUPINFO));½«Êý¾ÝÇå0£¡ sui.cb=sizeof(STARTUPINFO);
sui.dwFlags=STARTF_USESTDHANDLES; sui.hStdInput=hRead; sui.hStdOutput=hWrite;
sui.hStdError=GetStdHandle(STD_ERROR_HANDLE);
if(!CreateProcess(\TRUE,0,NULL,NULL,&sui,&pi))´´½¨×Ó½ø³Ì {
CloseHandle(hRead);
CloseHandle(hWrite);¹Ø±Õ¾ä±ú£¬½«Äں˶ÔÏóµÄʹÓüÆÊý¼õÉÙ1£¬ÕâÑùµ±²Ù×÷ϵͳ·¢ÏÖÄں˶ÔÏóµÄʹÓüÆÊýΪ0ʱ£¬½«Çå³ýÄں˶ÔÏó¡£ hRead=NULL; hWrite=NULL;
MessageBox(\´´½¨×Ó½ø³Ìʧ°Ü£¡\return; } else {
CloseHandle(pi.hProcess); CloseHandle(pi.hThread); } }
void CParentView::OnPipeRead() ²Ëµ¥¡°¶ÁÈ¡Êý¾Ý¡±´úÂë {
// TOD Add your command handler code here char buf[100]; DWORD dwRead;