1. 程式人生 > >網路程式設計與多執行緒的應用--基於socket udp編寫一個簡單聊天程式

網路程式設計與多執行緒的應用--基於socket udp編寫一個簡單聊天程式

void CChatDlg::OnBnClickedButtonSend()
{
// TODO: Add your control notification handler code here
//獲取對方IP
CIPAddressCtrl* pIPAddress = ((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS_SEND));
if (pIPAddress->IsBlank())
{
MessageBox(L"請先輸入對方IP地址!");
return;
}


DWORD dwIP;
pIPAddress->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);


int len =WideCharToMultiByte(CP_ACP,0,strSend,-1,NULL,0,NULL,NULL);  
char *ptxtTemp =new char[len +1];  
WideCharToMultiByte(CP_ACP,0,strSend,-1,ptxtTemp,len,NULL,NULL );  


//傳送資料
sendto(m_socket, ptxtTemp , strlen(ptxtTemp) + 1, 0, (SOCKADDR*)&addrTo, sizeof(SOCKADDR));


delete[] ptxtTemp;  


if (m_chatHeight++ >= 12)
{
m_chatContent.SetWindowText(L"");
m_chatHeight = 0;
}


//傳送我說的內容
WaitForSingleObject(m_hMutex, INFINITE);
CString strTemp("");
m_chatContent.GetWindowText(strTemp);


CString strMyContent = L"我說:" + strSend;


if (strTemp != "")
{
strTemp += "\r\n";
}
strTemp += strMyContent;


m_chatContent.SetWindowText(strTemp);
ReleaseMutex(m_hMutex);


SetDlgItemText(IDC_Edit_Send, L"");
}