winsock初级问题。

xhenry 2004-07-12 12:11:47
刚开始学winsock编程,使用MFC中的CSocket类,对各教材的标准例程有两问题。

问题一:为什么总是要继承一个CSocket类,然后使用派生的类来处理信息的发送、接受等操作。

问题二:当监听socket发现一个客户试图连接时,会new一个socket,然后用新的socket与客户通讯。我想知道,是不是每new一个socket实际上就是创建一个新线程?如果不是,如何保证各个socket能独立与客户通讯呢?

有关问题请各位详细解答,不胜感激!
...全文
105 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
iorikingdom 2004-07-12
第一:你要对具体问题,才能够构造出你所需要的类,所以要派生
第二:每个端口都可以处理不同的客户
回复
stormding 2004-07-12
当一个网络事件发生时,通过MFC的信息结构,就可以由CAsynsSocket或CSocket的Callback function按照事件来处理.最常用的有OnReceive(),OnSend(),OnAccept(),OnConnect(),OnClose()等函数,它们分别在收到信息时,发送时,侦听时,连接时,关闭时触发.

每个用户做网络要求都不同,当然会重写这些信息处理.

回复
zhaolaoxin 2004-07-12
CSocket只完成公用的操作,没有你自己想要的代码,所以继承后补充自己的东西。

第二个问题正如你所说的那样。
回复
ytssu 2004-07-12
这要看你在哪儿new,比如在C**app的InitInstance中new,那么就要等到
整个程序结束是销毁。
回复
PiggyXP 2004-07-12
如果每次new一个新的socket就是开了一个新的线程,那么这个线程如何结束(何时)?

==============================================================================

每次新开的监听线程,是需要你手动想办法结束的
回复
danielzhu 2004-07-12
看看深入浅出MFC,就明白了
回复
xhenry 2004-07-12
to difa:你需要的是一个控件,VB中包含一个WinSock的控件,可以设置监听的端口号,然后如果有接收到数据就会触发一个Receive的事件。具体内容可查看MSDN中的VB控件参考部分。
回复
difa 2004-07-12
有不有使用VC Csoket作DLL的,用户操作介面只提供如下:
int InitSocket(...);
int Send(...);
int Receive(...);
int CloseSocket(...);
......
这样可供VB,等其它调用。
请问,你样可行吗,见网上有这样的例子吗??
回复
xhenry 2004-07-12
to PiggyXP:我也想从winsocket api开始,可现在是维护一个老程序,没办法。

还有几个问题:

通常从CSocket派生的类会在OnReceive过程中调用窗口中的一个方法(在这个方法类中中读取实际接收到的数据),如果该窗口正好打开一个新的模式窗口,是否回阻塞数据的接收?

如果每次new一个新的socket就是开了一个新的线程,那么这个线程如何结束(何时)?是不是客户连接一断开就自动结束?还需要我delete它吗?
回复
PiggyXP 2004-07-12
其实我觉得楼主不如从基本的纯socket api学起

会让你对socket的机制理解得更为透彻

------ 纯属个人意见,视个人喜好而定:)
回复
PiggyXP 2004-07-12
1. 如果只是简单的操作,就没有必要从CSocket派生自己的类了,CSocket类中带有的成员函

数完全可以完成需要的功能。

2。是这样的,其实如果你不用MFC的CSocket类,自己用纯socket api来编程的话会对这个问

题理解得更为透彻^_^

还有什么问题欢迎你来网络版继续讨论^_^
回复
发帖
网络编程
创建于2007-09-28

1.8w+

社区成员

VC/MFC 网络编程
申请成为版主
帖子事件
创建了帖子
2004-07-12 12:11
社区公告
暂无公告