CSocket类编程
CSocket类可以和CArchive,CSocketFile类一起使用,
客户端和服务器端工程,各添加一个基于csocket类的mysocket类。
对于CSocket,处理网络事件通知的onaccept(),onclose(),onreceive()函数仍然可以使用,
onconnect(),onsend(),在csocket中,永远不会被调用。
我们在主对话框“连接”按钮的事件过程中,编写判断是否连接成功的代码
在这个案例中,在主界面定义mysocket的套接字
的指针,在mysocket中定义主界面的指针
CSockfile类主要是进行对连接中发送和接收的数据进行序列化
CSocketFile类是CFile的派生类,主要用来在Windows Sockets编程中发送和接收序列化数据(如结构体数据)。
CSocketFile类是CFile的派生类,主要用来在WindowsSocket编程中,发送和接收序列号数据(如结构体数据)
CSocket主要是进行套接字类,进行套接字申请,绑定,监听,连接等功能
CSocket 已经用 串行,并行替代了send, recv
3.3.2 使用CSocketFile类:https://book.2cto.com/201212/10930.html
使用缓冲区CArchive:使用缓冲区不但减少了对物理硬盘的操作次数,而且提高了程序的运行速度。
CArchive类对象在初始化时,首先指定一个缓冲区作为临时存储,再将需要保存的数据写到缓冲区中,当缓冲区被填满时,才将缓冲区中的内容写入到它所指向的cfile文件对象中。
串行化对象,CArchive类使用构造函数创建指定的串行化对象,并且与CSocketFile对象相关联。
语法格式:
参数列表
pfile指向一个需要进行串行化的对象指针。
//nmode是cha
通过配合CArchive和CSocketFile类接收数据的方法要简单很多,
由于CArchive和CSocketFile类封装了对接收到的数据进行序列号处理的过程,使得我们接收的任何网络数据都如读取本地文件一样简单,尤其是在接收较为复杂的数据信息类型时,这种优越更加体现出来了。
缺点:只能接收同步数据,要求对方也采用这种发送方式,这就降低了与不同类型收发方式的通信方的互通性。
char szTemp[200]; int n=Receive(szTemp,200); szTemp[n]=’\0’; //请问这行代码是什么意思?
szTemp[n]=’\0’;是什么意思?
n=Receive(szTemp,200)
Receive会返回成功接收的字节数
szTemp[n]=’\0’表示,将字符串的末尾加一个’\0’字符,表示字符串结尾。
C语言里的字符串,都是以’\0’字符结尾的。
追问
您好: 再请问一下n=Receive(szTemp,200),这两个参数是做什么用的呢?
追答
这取决于你这个函数在哪定义,怎么定义的。
按字面上理解,这个函数需要传一个接收数据的字符串首地址,和最大能接收的数据字节数。
也就是告诉Receive函数,接收的数据保存在szTemp为首地址的字符串中,最大能保存200字节。
实现CSocket的输入,输出时是使用CArchive和CSocketFile配合将收发数据操作转换为类似文件的读写操作
-----流程总结
1,CAsyncSocket类
2,CSocket类+CArchive类+CSocketFile类
一个完整的流程要3个socket对象,
- 客户端一个: 客户socket
- 服务器端二个: 监听socket,服务socket
之后,各种头文件的添加和类以及变量,方法的声明
函数分为2类,
- 程序主动调用的
- create、close、connect、send、listen、accept
- 系统某个网络事件触发的(触发时机和发生顺序都不确定的,不能事先编写流程,在软件运行过程中视情况触发,这些都是在类的属性里面,需要重写的)
- onConnect,OnAccept,OnReceive,OnClose
mfc,一个对话框的套接字怎么传递到另一个对话框
如果是非bai模态对话框,只要不删除对话du框,直接用对话框指针zhi就能调用它的成员(套接字dao)
但是如果你要在多个对话框使用的话,最好不要定义成成员变量,定义成全局最好,用指针传进去给对话框使用。
如果是模态,点击确定后,它的成员只在它声明的函数结束之前有效,如果你在前一个对话框的domodal()之后马上调用第二个对话框,那么直接用.调用第一个对话框成员(套接字)赋值给第二个对话框,然后再建立第二个对话框