⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 15.6.4 实现发送端功能.txt

📁 网上第一本以TXT格式的VC++深入详解孙鑫的书.全文全以TXT格式,并每一章节都分了目录,清晰易读
💻 TXT
字号:
15.6.4 实现发送端功能
本例的设计是当用户单击对话框上的【发送】按钮后,程序应将用户输入的数据发送给聊天的对方。
因此,需要捕获【发送】按钮的单击消息,并在其中实现发送功能。我们双击对话框资源上的【发
送】按钮, VC++开发环境将为该按钮自动生成一个按钮单击命令响应函数: OnBtnSend,然后在此
函数中添加代码实现数据发送的功能,结果如例 15-18所示。
例15-18 

//数据发送处理 
void CChatDlg : : OnBtnSend() 
// TODO: Add your control not工ficat工on handler code here 
//获取对方IP 
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; 
1/获得待发送数据 
GetDlgItemText (IDC_ EDIT_ SEND , strSend) ; 
//发送数据 
sendto(m_ socket , strSend, strSend .GetLength() +1 , 0 , (SOCKADDR*)&addrTo,sizeof(SOCKADDR)) ; 
//清空发送编辑框中的内容 
SetDlgItemText (IDC_ EDIT_SEND,"" ) ; 
在上述例 15-18所示 OnBtnSend函数中,首先需要从 IP地址控件 (其 E为 IDC IPADDRESS 1)上得
到对方 IP地址。在 MFC中,如果需要对控件进行操作,都是利用控件所对应的类来完成的, IP控
件对应的 MFC类是: CIPAddressCtrl。这个类有一个 GetAddress成员函数,该函数将返回 ID地址控
件中非空白字段的数值。 GetAddress函数有两种声明形式,其中一种如下所示 : 
int GetAddress( DWORD& dwAddress ); 
GetAddress函数的这种声明形式需要一个 DWORD引用类型的参数,也就是说,我们只需要定义一个 
DWORD变量,并将其传递给 GetAddress函数,就可得到以 DWORD值 ·表示的 IP地址。所以上述例 
15-18所示 OnBtnSend函数中,首先调用 GetDlgltem得到E地址控件,因为该控件是 CIPAddressCtrl
类型,所以需要将 GetDlgItem函数的返回值强制转换为 CIPAddressCtrl*类型。然后调用该类的 
GetAddress函数得到 E地址。
接着定义了一个地址结构 ( SOCKADDR_IN )变量 : addrTo,并设置其成员的值。其他成员的设置前
面内容已经介绍过了,这里主要关注第三个成员 sin-addrSJHIS-addr的设置,该成员是聊天对方的 
IP地址,并且要求是 DWORD类型,虽然刚刚获得的 IP地址: dwIP也是 DWORD类型,但它是主机字节
顺序,因此这里需要调用 htonl函数将其转换为网络字节顺序。
接下来调用 GetDlgItemText函数得到要发迭的数据,然后调用 sendto函数发送该数据,并且多发
送一个字节。当数据发送完成之后,调用 SetDlgltemText函数清空发送编辑框中的内容。 
Build井运行 Chat程序,在 IP地址控件中输入与之聊天的对方 E地址,例如,输入本地回路 IP地
址: 127.0.0.1,并在发送编辅框中输入一些字符,然后单击【发送】 -按钮,在接收编辑框中就可
以看到发送的数据。但是当再次发送数据后,看到在接收编辑框中两次接收到的数据并没有换行,
所有的数据都是在同一行显示的,如图 15.14所示。
图 15.14多次接收到的数据并未换行显示

但是在上面的 OnRecvData程序(如例 15-17所示代码)中已经为接收到的数据添加了"\r\n",即换行
符,那么为什么显示时文字没有换行呢?读者应注意,为了件接受换行符,必须设置该控件支持多行
数据这一属性,即打开接收编辑框控件的属性对话框,井打开Styles选项卡,在该选项卡中选中
Multiline选项,如图 15.15所示。 
图 15.15为编辑框控件设置支持多行数据属性

然后再次运行 Chat程序,试着发送几条数据,这时可以看到数据以多行的方式显示了,如图 15.16
所示。
另外,在 Chat程序中还可以将【发送】按钮设置为默认按钮,这样用户在输入将要发送的数据之后,
只要按下回车键就可以发送该数据了。为了实现这样的功能,我们可以修改该按钮的属性,设置其
Defau1tbutton选工页,如图 15.17所示。当然,这时我们还可以将该按钮隐藏起来,即在发送按钮
属性对话框的General选项卡上取消其Visible选项(如图 15.18所示),这样Chat程序运行时就看不
到这个按钮,用户只要按下回车键就可以发
送数据。对于聊天程序来说,这种操作方式对用户是很方便的。这时的程序运行界面如图 

15.19所示。 
图 1 5 . 1 7设置发送按钮的默认按钮选项 
图 15.1 8取消发送按钮的可视选项
图 15.1 9隐藏发送按钮时程序运行界面

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -