ËïöÎÀÏʦVC±Ê¼Ç

ÄÚÈÝ·¢²¼¸üÐÂʱ¼ä : 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;

ÁªÏµ¿Í·þ£º779662525#qq.com(#Ìæ»»Îª@) ËÕICP±¸20003344ºÅ-4 ceshi