计算机网络工程---实践教程
{
// Construction public:
CWyChatDlg(CWnd* pParent = NULL); // standard constructor
~CWyChatDlg(); //自行添加的对话框析构函数 // Dialog Data
// Implementation protected:
// Generated message map functions //{{AFX_MSG(CWyChatDlg) virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon(); afx_msg void OnSend(); //}}AFX_MSG HICON m_hIcon;
// ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CWyChatDlg) protected:
virtual void DoDataExchange(CDataExchange* pDX); //}}AFX_VIRTUAL
// DDX/DDV support
//{{AFX_DATA(CWyChatDlg)
enum { IDD = IDD_WYCHAT_DIALOG };
// NOTE: the ClassWizard will add data members here
//}}AFX_DATA
afx_msg void OnSock(WPARAM,LPARAM); //自行添加的套接字响应函数
DECLARE_MESSAGE_MAP()
private:
SOCKET m_socket; //自行定义的私有套接字成员变量
6
public:
计算机网络工程---实践教程
};
BOOL InitSocket(); //自行定义的套接字初始化函数
WyChatDlg.cpp的主要代码如下:
CWyChatDlg::~CWyChatDlg() //自行添加的析构函数 {
if(m_socket) }
BEGIN_MESSAGE_MAP(CWyChatDlg, CDialog)
//{{AFX_MSG_MAP(CWyChatDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDSEND, OnSend) //}}AFX_MSG_MAP { }
closesocket(m_socket); //关闭套接字
ON_MESSAGE(MSG_SOCK,OnSock) //自行添加的消息关联 END_MESSAGE_MAP()
///////////////////////////////////////////////////////////////////////////// // CWyChatDlg message handlers
BOOL CWyChatDlg::OnInitDialog() {
7
CDialog::OnInitDialog();
// Add \
// IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000);
计算机网络工程---实践教程
}
CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { }
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { }
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
// Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); SetIcon(m_hIcon, FALSE);
// TODO: Add extra initialization here
InitSocket(); //自行添加的套接字初始化函数调用
return TRUE; // return TRUE unless you set the focus to a control
// Set big icon // Set small icon
BOOL CWyChatDlg::InitSocket() {
m_socket=socket(AF_INET,SOCK_DGRAM,0); if(INVALID_SOCKET==m_socket) {
int a=WSAGetLastError(); CString str; str.Format(\ MessageBox(str); return FALSE;
}
SOCKADDR_IN addrSock;
addrSock.sin_addr.S_un .S_addr =inet_addr(\ addrSock.sin_family =AF_INET;
8
计算机网络工程---实践教程
addrSock.sin_port =htons(5003);
if(bind(m_socket,(SOCKADDR*)&addrSock,sizeof(SOCKADDR))==SOCKET_ERROR) {
// AfxMessageBox(_T(\
int a=WSAGetLastError(); CString str;
str.Format(\ AfxMessageBox(str); return FALSE;
}
if(WSAAsyncSelect(m_socket,m_hWnd,MSG_SOCK,FD_READ|FD_WRITE)==SOCKET_ERROR) {
AfxMessageBox(_T(\ return FALSE;
}
return TRUE; }
void CWyChatDlg::OnSock(WPARAM wParam,LPARAM lParam) {
switch(LOWORD(lParam))
{
case FD_READ:
{
char buff[254];
sockaddr_in addr2; int n=sizeof(addr2); long charNum=0; CString strFileLen=\
charNum=::recvfrom(m_socket,buff,sizeof(buff),0,(sockaddr*)&addr2,&n); buff[charNum]='\\0'; //在接收缓冲区实际接收到的字符串尾部加上结束标志
CString strTemp;
GetDlgItemText(IDC_EDITChat,strTemp);
strTemp=strTemp+\对方说:\
9
计算机网络工程---实践教程
//SetDlgItemText(IDC_EDITChat,buff); SetDlgItemText(IDC_EDITChat,strTemp);
}
UpdateData(false); break;
case FD_WRITE:
{
}
default: break; }
// The system calls this to obtain the cursor to display while the user drags // the minimized window.
HCURSOR CWyChatDlg::OnQueryDragIcon() { }
void CWyChatDlg::OnSend() {
// TODO: Add your control notification handler code here return (HCURSOR) m_hIcon; }
CString strSend;
GetDlgItemText(IDC_EDIT_Send,strSend);
sockaddr_in addr,addr2; int n=sizeof(addr2); char buff[10]={0}; addr.sin_family=AF_INET;
addr.sin_port=htons(7600); //设置对方的端口号
addr.sin_addr.S_un.S_addr=inet_addr(\设置对方的IP
/*int n1=strSend.GetLength(); CString msg; msg.Format(\
MessageBox(msg);
*/
10
if(strSend.GetLength()!=0)