关于CAsyncSocket的Send()

maomaosansan 2004-07-18 11:31:20
我的代码如下:
BOOL res=m_pMySocket->Create();
if (!res)
{
AfxMessageBox("Socket created error!");
}
res=m_pMySocket->Connect(m_Host,m_nPort);
if (!res)
if (GetLastError()!=WSAEWOULDBLOCK)
AfxMessageBox("Error! Can't connect to server!",MB_ICONEXCLAMATION);

if(GetLastError()!=WSAEWOULDBLOCK)
{
AfxMessageBox("error!");
return;
}
// while(GetLastError()==WSAEWOULDBLOCK)
// ;
CString strsend="*";
int nsend=m_pMySocket->Send(strsend,strsend.GetLength(),0);
if (nsend!=strsend.GetLength())
{
if(GetLastError()!=WSAEWOULDBLOCK)
{
AfxMessageBox("error!");
return;
}
}
在我调用send函数的时候返回值是 WSAEWOULDBLOCK 10035,也就是请求不能立刻被执行;
1:是不是在send 完成后调用OnSend()?(5分)
2:我用WPE看不到send() 的内容被发送出来,这个send一定会被阻塞不会立即执行,而我如果自己在另一个地方用send()(等待一段时间后调用)就可以看到send的内容被发送出去了;
我的问题是当send()被阻塞后它还会不会执行??如果执行了为什么在WPE中我看不到?(5分)
3:如果被阻塞后不执行我该怎么做,才能发送我要发送的内容??(求源码 50分-解决立即结贴-只限于用CAsyncSocket实现)


...全文
456 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
hollandwolf 2004-10-25
  • 打赏
  • 举报
回复
碰到同样的问题了
呵呵,谢谢楼上提供的资料
danielzhu 2004-07-24
  • 打赏
  • 举报
回复
还没有解决阿?

给你看一个例子,你的是TCP还是UDP
下面一个是UDP,一个是TCP

UDP:
http://support.microsoft.com/default.aspx?scid=kb;en-us;214396

TCP server and Client:
http://support.microsoft.com/default.aspx?scid=kb;en-us;192570
门吹西风 2004-07-23
  • 打赏
  • 举报
回复
没select
gdy119 2004-07-19
  • 打赏
  • 举报
回复
我也是这么认为的,hellopine()说的有道理
用MFC提供的类只能写来玩,不能作为商业软件去卖钱!

danielzhu 2004-07-19
  • 打赏
  • 举报
回复
UP
jazy 2004-07-19
  • 打赏
  • 举报
回复
它们不是要你来调用的,是socket的通知消息函数,
比如OnConnet,这个消息在异步socket的connect真正成功时由系统触发,
你在里边写连接成功后准备做的事情就好了
hellopine 2004-07-19
  • 打赏
  • 举报
回复
做网络开发,建议直接使用WINSOCK API 函数

MFC 并没有封装多少

而且,不容易理解
jini 2004-07-19
  • 打赏
  • 举报
回复
用异步socket的时候,一句话,也要用异步函数来处理,如楼主的send,判断是否send完成的条件应该也用select函数,一般在发之前用select,然后send,如果正常的话,要么等对方回信息,要么对方断开,要么自己限时断开,没有其他形式的。
maomaosansan 2004-07-18
  • 打赏
  • 举报
回复
新问题,新发现:如果我在后面再加上如下代码:
strsend="**";
int nsend=m_pMySocket->Send(strsend,strsend.GetLength(),0);
if (nsend!=strsend.GetLength())
{
if(GetLastError()!=WSAEWOULDBLOCK)
{
AfxMessageBox("error!");
return;
}
}
就可以看到发送出去了一个 “**”;但是前面的没有发送出去,也就是说,前面的
send()不知道跑哪里玩去了。我跟踪了一下发现后一个没有阻塞,所以就发出去了,那么还是第3个问题,如果send被阻塞了,我该怎么办才那完成发送呢???
Kudeet 2004-07-18
  • 打赏
  • 举报
回复
网络我是不行,这是总结帖里的:
YourConnectFunc()
m_socket.connect();//做了连接,马上返回
m_socket.AsyncSelect(FD_CONNECT) //申请事件:连接返回后通知我,不管成功失败
//连接事件
OnConnect(int nErrCode) //参数是错误代码
//首先检查有无错误发生
//做你想做的事情,比如初始化某些变量
//...
// 我想发送数据,当网络可写时告诉我,连接中断时也告诉我,比如服务器close了
m_socket.AsyncSelect(FD_WRITE | FD_CLOSE)

OnWrite(int errocode)
//首先检查有无错误发生

//正常,网络已经可以写了
//发送数据
m_socket.send()

//我想接受服务器反馈,当由数据到达时告诉我,连接中断时也告诉我,比如服务器close了
m_socket.AsyncSelect(FD_READ | FD_CLOSE)

OnRead()
//首先检查有无错误发生

//正常,数据已经可以读了
//读取数据
m_socket.receive()
m_socket.AsyncSelect(FD_WRITE | FD_CLOSE)

Q:很多人问为什莫要多次调用AsyncSelect?
A:现在是可读的,不等于过十分钟也可读,就是说Create 一个socket时可写,不代表永远可写,等需要写的时候要在检查。
maomaosansan 2004-07-18
  • 打赏
  • 举报
回复
-----类似的,Send()如果返回WSAEWOULDBLOCK错误,我们在OnSend()处等待,Receive()如果返回WSAEWOULDBLOCK错误,我们在OnReceive()处等待,以此类推。------------

这断话我看了好几天了,OnSend()、OnReceive()等的参数和Send()、Receive()等不同,我在那里等,我需要的内容从哪里来??
gracezhu 2004-07-18
  • 打赏
  • 举报
回复
你发送的方式很容易导致阻塞,请看以下这段话:
客户方在使用CAsyncSocket::Connect()时,往往返回一个WSAEWOULDBLOCK的错误(其它的某些函数调用也如此),实际上这不应该算作一个错误,它是Socket提醒我们,由于你使用了非阻塞Socket方式,所以(连接)操作需要时间,不能瞬间建立。既然如此,我们可以等待呀,等它连接成功为止,于是许多程序员就在调用Connect()之后,Sleep(0),然后不停地用WSAGetLastError()或者CAsyncSocket::GetLastError()查看Socket返回的错误,直到返回成功为止。这是一种错误的做法,断言,你不能达到预期目的。事实上,我们可以在Connect()调用之后等待CAsyncSocket::OnConnect()事件被触发,CAsyncSocket::OnConnect()是要表明Socket要么连接成功了,要么连接彻底失败了。至此,我们在CAsyncSocket::OnConnect()被调用之后就知道是否Socket连接成功了,还是失败了。
类似的,Send()如果返回WSAEWOULDBLOCK错误,我们在OnSend()处等待,Receive()如果返回WSAEWOULDBLOCK错误,我们在OnReceive()处等待,以此类推。
还有一点,也许是个难点,那就是在客户方调用Connect()连接服务方,那么服务方如何Accept(),以建立连接的问题。简单的做法就是在监听的Socket收到OnAccept()时,用一个新的CAsyncSocket对象去建立连接,例如:

void CMySocket::OnAccept( int ErrCode )
{
CMySocket* pSocket = new CMySocket;
Accept( *pSocket );
}
于是,上面的pSocket和客户方建立了连接,以后的通信就是这个pSocket对象去和客户方进行,而监听的Socket仍然继续在监听,一旦又有一个客户方要连接服务方,则上面的OnAccept()又会被调用一次。当然pSocket是和客户方通信的服务方,它不会触发OnAccept()事件,因为它不是监听Socket。


maomaosansan 2004-07-18
  • 打赏
  • 举报
回复
up
Kudeet 2004-07-18
  • 打赏
  • 举报
回复
呵呵!帮不了,你查查以前的老帖子看。
maomaosansan 2004-07-18
  • 打赏
  • 举报
回复
up
网络编程,当然要用到Windows Socket(套接字)技术。Socket相关的操作由一系列API函数来完成,比如socket、bind、listen、connect、accept、sendsendto、recv、recvfrom等。调用这些API函数有一定的先后次序,有些函数的参数还比较复杂,对于开发者来说,不是很好用。于是,微软的MFC提供了两个类:CAsyncSocket和CSocket,极大地方便了Socket功能的使用。   CAsyncSocket类在较低层次上封装了Windows Socket API,并且通过内建一个(隐藏的)窗口,实现了适合Windows应用的异步机制(Windows Socket API默认情况下工作在阻塞模式,不方便直接在消息驱动的Windows程序上使用)。CSocket类从CAsyncSocket类派生,进一步简化了Socket功能的应用。不过很遗憾,正因为这两个类都内建了一个窗口,它们并不是线程安全的(thread-safe);如果要在多线程环境下应用Socket功能,建议自行封装Socket API函数。 基于TCP的socket编程的服务器端程序流程如下: 1、创建套接字 2、将套接字绑定到一个本地地址和端口号上(bind) 3、将套接字设为监听模式,准备接受客户请求(listen) 4、等待客户请求,请求到来时接受请求,建立链接,并返回 一个新的基于此次通信的套接字(accept) 5、用返回的套接字和客户端进行通信(send、recv) 6、返回,等待另一客户请求 7、关闭套接字 基于TCP的socket编程的客户端程序流程如下: 1、创建套接字 2、向服务器端发送请求(connect) 3、和服务器端进行通信(send、recv) 4、关闭套接字 基于UDP的socket编程的服务器端程序流程如下: 1、创建套接字 2、将套接字绑定到本地地址和端口号上(bind) 3、等待接收数据(recvfrom) 4、关闭套接字 基于UDP的socket编程的客户端程序流程如下: 1、创建套接字 2、和服务器端进行通信(sendto) 3、关闭套接字 异步方式指的是发送方不等接收方响应,便接着发下个数据包的通信方式;而同步指发送方发出数据后,等收到接收方发回的响应,才发下一个数据包的通信方式。   阻塞套接字是指执行此套接字的网络调用时,直到成功才返回,否则一直阻塞在此网络调用上,比如调用recv()函数读取网络缓冲区中的数据,如果没有数据到达,将一直挂在recv()这个函数调用上,直到读到一些数据,此函数调用才返回;而非阻塞套接字是指执行此套接字的网络调用时,不管是否执行成功,都立即返回。比如调用recv()函数读取网络缓冲区中数据,不管是否读到数据都立即返回,而不会一直挂在此函数调用上。在实际Windows网络通信软件开发中,异步非阻塞套接字是用的最多的。平常所说的C/S(客户端/服务器)结构的软件就是异步非阻塞模式的。   对于这些概念,初学者的理解也许只能似是而非,我将用一个最简单的例子说明异步非阻塞Socket的基本原理和工作机制。目的是让初学者不仅对Socket异步非阻塞的概念有个非常透彻的理解,而且也给他们提供一个用Socket开发网络通信应用程序的快速入门方法。操作系统是Windows 98(或NT4.0),开发工具是Visual C++6.0。   MFC提供了一个异步类CAsyncSocket,它封装了异步、非阻塞Socket的基本功能,用它做常用的网络通信软件很方便。但它屏蔽了Socket的异步、非阻塞等概念,开发人员无需了解异步、非阻塞Socket的原理和工作机制。因此,建议初学者学习编网络通信程序时,暂且不要用MFC提供的类,而先用Winsock2 API,这样有助于对异步、非阻塞Socket编程机制的理解。
本书是一本介绍利用Visual C++进行网络通信程序开发的书籍,书中精选了大量网络实例,涵盖了本地计算机网络编程,局域网网络通信编程,IE编程,网络通信协议编程,串口通信编程,代理服务器编程和高级网络通信编程。每个工程实例都提供了完整的源代码,读者可以很容易地根据需要进行二次开发。本书适合进行网络通信开发的人员阅读,同时也可以作为科研单位,高校相关专业人员的参考书籍。

目录介绍
第1章 Visual C++网络通信编程基础 1
1.1 Winsock1.1编程技术 1
1.1.1 Winsock的基本概念 1
1.1.2 Winsock的编程特点 2
1.1.3 Winsock基本的API 2
1.1.4 Winsock的异步模式 7
1.1.5 面向连接协议和无连接协议 20
1.2 Winsock 2.0编程技术 21
1.2.1 Winsock 2.0技术说明 21
1.2.2 Winsock 2.0新增函数 25
1.2.3 Winsock网络程序——聊天室 26
1.3 CAsyncSocket编程技术 38
1.3.1 CAsyncSocket类的组成 38
1.3.2 CAsyncSocket编程模型 39
1.4 CSocket编程技术 41
1.4.1 CSocket类的组成 42
1.4.2 CSocket应用实例——聊天室 43
1.5 WinInet编程技术 52

第2章 本地计算机网络编程 57
2.1 获取计算机的名称和IP地址 57
2.2 获取计算机的子网掩码 60
2.3 获取计算机的DNS设置 62
2.4 获取计算机的网卡地址 63
2.5 获取计算机安装的协议 65
2.6 获取计算机提供的服务 67
2.7 获取计算机的所有网络资源 69
2.8 修改本地计算机的网络设置 70
2.9 获取计算机TCP/IP的所有信息 74

第3章 局域网网络通信编程实例 79
3.1 获取网上邻居 79
3.1.1 实现原理 80
3.1.2 实例实现 83
3.2 IP地址和主机名之间的转换 87
3.2.1 实现原理 87
3.2.2 实例实现 89
3.3 映射网络驱动器 93
3.3.1 实现原理 93
3.3.2 实例实现 95
3.4 局域网消息发送程序Net Send 97
3.4.1 实现原理 98
3.4.2 实例实现 101
3.5 获取局域网内其他计算机的信息 103

第4章 IE编程实例 111
4.1 简单的浏览器的实现 111
4.1.1 实现原理 111
4.1.2 实例实现 112
4.2 删除IE相关历史记录 116
4.2.1 实现原理 116
4.2.2 实例实现 117
4.3 将应用程序加入到IE工具栏 121
4.3.1 实现原理 122
4.3.2 实例实现 123
4.4 超级链接的实现 127
4.4.1 实现原理 127
4.4.2 实例实现 128
4.5 禁止IE的弹出窗口 132
4.5.1 实现原理 132
4.5.2 实例实现 133
4.6 禁止浏览某些网站 139
4.6.1 实现原理 139
4.6.2 实例实现 139
4.7 IE收藏夹 142
4.7.1 实现原理 142
4.7.2 实例实现 142
4.8 设置桌面快捷方式和活动桌面 145
4.8.1 实现原理 145
4.8.2 实例实现 146

第5章 基本网络编程实例 150
5.1 点对点文件传输 150
5.2 端口扫描程序 155
5.2.1 实现原理 155
5.2.2 实例实现 155
5.3 Finger编程 161
5.3.1 实现原理 162
5.3.2 实例实现 164
5.4 Sniff编程 166
5.4.1 实现原理 166
5.4.2 实例实现 167
5.5 Internet文件下载 178
5.5.1 实现原理 178
5.5.2 实例实现 180

第6章 网络通信协议编程实例 184
6.1 FTP协议 185
6.1.1 FTP工作原理 185
6.1.2 FTP数据表示 186
6.1.3 FTP命令 187
6.1.4 FTP应答 192
6.1.5 FTP客户端实例方法 194
6.1.6 FTP客户端实例实现 201
6.2 SMTP协议 221
6.2.1 SMTP会话 221
6.2.2 SMTP信件 225
6.2.3 SMTP客户端实例方法 232
6.2.4 SMTP客户端实例实现 233
6.3 POP3协议 259
6.3.1 POP3会话 259
6.3.2 POP3信件 264
6.3.3 POP3客户端实例方法 268
6.3.4 POP3客户端实例实现 268
6.4 ICMP协议 287
6.4.1 ICMP报文格式 287
6.4.2 ICMP时间戳请求与应答 289
6.4.3 Ping程序的实现 291
6.4.4 TraceRoute程序的实现 300
6.5 Telnet协议 308
6.5.1 Telnet协议 308
6.5.2 NVT ASCII字符集 309
6.5.3 协商选项 309
6.5.4 BBS实例实现 310
6.6 HTTP协议 323
6.6.1 HTTP会话 324
6.6.2 HTTP数据 329
6.6.3 HTTP客户端程序的实现 329
6.6.4 HTTP服务器实例实现 343

第7章 Modem/串口通信编程实例 353
7.1 AT命令 353
7.1.1 Modem状态 353
7.1.2 AT命令 354
7.1.3 Modem返回信息码 354
7.2 MSCOMM控件编程实例 355
7.2.1 实现原理 355
7.2.2 实例实现 356
7.3 串口通信API编程实例 360
7.3.1 打开和关闭串口 360
7.3.2 串口配置 362
7.3.3 串口属性设置 365
7.3.4 缓冲区控制 366
7.3.5 串口读写 367
7.3.6 通信事件 369
7.3.7 设备控制命令 370
7.3.8 实例实现 370

第8章 代理服务器编程实例 378
8.1 Socks 5协议编程 379
8.1.1 实例原理 386
8.1.2 实例实现 388
8.2 HTTP代理服务器实例 397
8.2.1 主框架代码分析 397
8.2.2 代理类CProxyServer的实现 399

第9章 高级实例解析 409
9.1 串口通信高级编程实例 409
9.1.1 主程序结构和流程 409
9.1.2 实例演示 409
9.1.3 实例原理 410
9.1.4 实例设计 414
9.1.5 代码分析 414
9.2 网络流量监控实例 425
9.2.1 主程序结构和流程 426
9.2.2 实例演示 426
9.2.3 实例原理 426
9.2.4 实例设计 428
9.2.5 代码分析 429
9.3 网站下载实例 438
9.3.1 主程序结构和流程 438
9.3.2 实例演示 438
9.3.3 实例原理 439
9.3.4 实例设计 441
9.3.5 代码分析 442
9.4 网络五子棋实例 458
9.4.1 主程序结构和流程 458
9.4.2 实例演示 458
9.4.3 实例原理 459
9.4.4 实例设计 459
9.4.5 代码分析 459
9.5 语音聊天实例 466
9.5.1 主程序结构和流程 467
9.5.2 实例演示 467
9.5.3 实例原理 468
9.5.4 实例设计 472
9.5.5 代码分析 473
9.6 远程控制实例 482
9.6.1 主程序结构和流程 482
9.6.2 实例演示 483
9.6.3 实例原理 484
9.6.4 实例设计 485
本书是一本介绍利用Visual C++进行网络通信程序开发的书籍,书中精选了大量网络实例,涵盖了本地计算机网络编程,局域网网络通信编程,IE编程,网络通信协议编程,串口通信编程,代理服务器编程和高级网络通信编程。每个工程实例都提供了完整的源代码,读者可以很容易地根据需要进行二次开发。本书适合进行网络通信开发的人员阅读,同时也可以作为科研单位,高校相关专业人员的参考书籍。

目录介绍
第1章 Visual C++网络通信编程基础 1
1.1 Winsock1.1编程技术 1
1.1.1 Winsock的基本概念 1
1.1.2 Winsock的编程特点 2
1.1.3 Winsock基本的API 2
1.1.4 Winsock的异步模式 7
1.1.5 面向连接协议和无连接协议 20
1.2 Winsock 2.0编程技术 21
1.2.1 Winsock 2.0技术说明 21
1.2.2 Winsock 2.0新增函数 25
1.2.3 Winsock网络程序——聊天室 26
1.3 CAsyncSocket编程技术 38
1.3.1 CAsyncSocket类的组成 38
1.3.2 CAsyncSocket编程模型 39
1.4 CSocket编程技术 41
1.4.1 CSocket类的组成 42
1.4.2 CSocket应用实例——聊天室 43
1.5 WinInet编程技术 52

第2章 本地计算机网络编程 57
2.1 获取计算机的名称和IP地址 57
2.2 获取计算机的子网掩码 60
2.3 获取计算机的DNS设置 62
2.4 获取计算机的网卡地址 63
2.5 获取计算机安装的协议 65
2.6 获取计算机提供的服务 67
2.7 获取计算机的所有网络资源 69
2.8 修改本地计算机的网络设置 70
2.9 获取计算机TCP/IP的所有信息 74

第3章 局域网网络通信编程实例 79
3.1 获取网上邻居 79
3.1.1 实现原理 80
3.1.2 实例实现 83
3.2 IP地址和主机名之间的转换 87
3.2.1 实现原理 87
3.2.2 实例实现 89
3.3 映射网络驱动器 93
3.3.1 实现原理 93
3.3.2 实例实现 95
3.4 局域网消息发送程序Net Send 97
3.4.1 实现原理 98
3.4.2 实例实现 101
3.5 获取局域网内其他计算机的信息 103

第4章 IE编程实例 111
4.1 简单的浏览器的实现 111
4.1.1 实现原理 111
4.1.2 实例实现 112
4.2 删除IE相关历史记录 116
4.2.1 实现原理 116
4.2.2 实例实现 117
4.3 将应用程序加入到IE工具栏 121
4.3.1 实现原理 122
4.3.2 实例实现 123
4.4 超级链接的实现 127
4.4.1 实现原理 127
4.4.2 实例实现 128
4.5 禁止IE的弹出窗口 132
4.5.1 实现原理 132
4.5.2 实例实现 133
4.6 禁止浏览某些网站 139
4.6.1 实现原理 139
4.6.2 实例实现 139
4.7 IE收藏夹 142
4.7.1 实现原理 142
4.7.2 实例实现 142
4.8 设置桌面快捷方式和活动桌面 145
4.8.1 实现原理 145
4.8.2 实例实现 146

第5章 基本网络编程实例 150
5.1 点对点文件传输 150
5.2 端口扫描程序 155
5.2.1 实现原理 155
5.2.2 实例实现 155
5.3 Finger编程 161
5.3.1 实现原理 162
5.3.2 实例实现 164
5.4 Sniff编程 166
5.4.1 实现原理 166
5.4.2 实例实现 167
5.5 Internet文件下载 178
5.5.1 实现原理 178
5.5.2 实例实现 180

第6章 网络通信协议编程实例 184
6.1 FTP协议 185
6.1.1 FTP工作原理 185
6.1.2 FTP数据表示 186
6.1.3 FTP命令 187
6.1.4 FTP应答 192
6.1.5 FTP客户端实例方法 194
6.1.6 FTP客户端实例实现 201
6.2 SMTP协议 221
6.2.1 SMTP会话 221
6.2.2 SMTP信件 225
6.2.3 SMTP客户端实例方法 232
6.2.4 SMTP客户端实例实现 233
6.3 POP3协议 259
6.3.1 POP3会话 259
6.3.2 POP3信件 264
6.3.3 POP3客户端实例方法 268
6.3.4 POP3客户端实例实现 268
6.4 ICMP协议 287
6.4.1 ICMP报文格式 287
6.4.2 ICMP时间戳请求与应答 289
6.4.3 Ping程序的实现 291
6.4.4 TraceRoute程序的实现 300
6.5 Telnet协议 308
6.5.1 Telnet协议 308
6.5.2 NVT ASCII字符集 309
6.5.3 协商选项 309
6.5.4 BBS实例实现 310
6.6 HTTP协议 323
6.6.1 HTTP会话 324
6.6.2 HTTP数据 329
6.6.3 HTTP客户端程序的实现 329
6.6.4 HTTP服务器实例实现 343

第7章 Modem/串口通信编程实例 353
7.1 AT命令 353
7.1.1 Modem状态 353
7.1.2 AT命令 354
7.1.3 Modem返回信息码 354
7.2 MSCOMM控件编程实例 355
7.2.1 实现原理 355
7.2.2 实例实现 356
7.3 串口通信API编程实例 360
7.3.1 打开和关闭串口 360
7.3.2 串口配置 362
7.3.3 串口属性设置 365
7.3.4 缓冲区控制 366
7.3.5 串口读写 367
7.3.6 通信事件 369
7.3.7 设备控制命令 370
7.3.8 实例实现 370

第8章 代理服务器编程实例 378
8.1 Socks 5协议编程 379
8.1.1 实例原理 386
8.1.2 实例实现 388
8.2 HTTP代理服务器实例 397
8.2.1 主框架代码分析 397
8.2.2 代理类CProxyServer的实现 399

第9章 高级实例解析 409
9.1 串口通信高级编程实例 409
9.1.1 主程序结构和流程 409
9.1.2 实例演示 409
9.1.3 实例原理 410
9.1.4 实例设计 414
9.1.5 代码分析 414
9.2 网络流量监控实例 425
9.2.1 主程序结构和流程 426
9.2.2 实例演示 426
9.2.3 实例原理 426
9.2.4 实例设计 428
9.2.5 代码分析 429
9.3 网站下载实例 438
9.3.1 主程序结构和流程 438
9.3.2 实例演示 438
9.3.3 实例原理 439
9.3.4 实例设计 441
9.3.5 代码分析 442
9.4 网络五子棋实例 458
9.4.1 主程序结构和流程 458
9.4.2 实例演示 458
9.4.3 实例原理 459
9.4.4 实例设计 459
9.4.5 代码分析 459
9.5 语音聊天实例 466
9.5.1 主程序结构和流程 467
9.5.2 实例演示 467
9.5.3 实例原理 468
9.5.4 实例设计 472
9.5.5 代码分析 473
9.6 远程控制实例 482
9.6.1 主程序结构和流程 482
9.6.2 实例演示 483
9.6.3 实例原理 484
9.6.4 实例设计 485

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧