CSocket请教

sonyStd 2000-07-17 07:32:00
小生近日学习WinSock编程,有一些不明白的地方请高手指点.
按照msdn上讲,使用CSocket
server:Create(nPort)->Listen()->Accept()->Send()
client:Create()->Connect()->Receive()
默认阻塞模式,那是不是将两端尽管Listen()/Connect(),然后将accept()放到OnAccept()里就行了?但是我在OnAccept()里却收不到任何通知.应该没有必要再
开个线程了吧?那到底应该如何使用?望高手指点.

请打勾
...全文
187 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sonyStd 2000-07-20
  • 打赏
  • 举报
回复
没想到第一次提问就有这么多专家回答,真谢谢各位!~~我想问题应该可以解决啦。
lionpb回答的很详细,但连接后应该双方都可以Send()/Receive()吧。
gomi 2000-07-19
  • 打赏
  • 举报
回复
修正:
2、用127.*.*.*作地址本地模拟网络,WIN98以网络客户模式登录,Create()会失败
gomi 2000-07-19
  • 打赏
  • 举报
回复
调用过程是正确的。
OnAccept()没有被调用,必然内部有错误,你需要逐步检查Create,Listen,Connect等调用是否成功。OnAccept()未调用,客户端Connect()必然失败,调用GetLastError()查看一下错误原因。
错误原因一般如下:
1、未调用AfxSocketInit()
2、用127.*.*.*作地址本地模拟网络,WIN98以网络客户模式登录,Listen()会失败
3、服务器端口已被其它socket使用,Create(nPort)会失败
lionpb 2000-07-19
  • 打赏
  • 举报
回复
不好意思,好象对于Server端,应该是Receive(),而不是Send(),Client端是Send():
Server->Create(SrvPort)->Listen()->Accept()->Receive()
Client->Create()->Connect(SrvIP,SrvPort)->Send(Buf,len,...)
请不妨试一试?
Client端发送:
CSocket *mysock=new CSocket();
if (!mysock->Create(0,SOCK_STREAM,NULL))
{
return FALSE;
}

if (!mysock->Connect(ServerIp,ServerPort))
return FALSE;
if (!mysock->Send(SendBuf,SendLen,0))
{
return FALSE;
}
Client端接收
mysock->Receive(RcvBuf,MaxLen,0);

以上代码摘自我公司的一个产品,中间环节不便透露,仅提供主要部分。详情请看CSocket类的介绍
zzh 2000-07-19
  • 打赏
  • 举报
回复
当然没有必要开线程了,一定是你的程序代码有问题,服务端应该是这样的:
CSocket sockSrvr,CSocket sockSrecv.
sockSrvr.Create(nPort),sockSrvr.Listen(),sockSrvr.Accept(sockrecv),这样就只要客户连接过来,服务端就可以接收到了。当然,你也可以从CAsyncSocket派生类来生成自己的SOCKET,具体使用可以参考MSDN中的CHAT程序。
cctime 2000-07-19
  • 打赏
  • 举报
回复
CSocket 默认没有 OnAccept() 事件,要调用 AsyncSelect(FD_ACCEPT) 才会有
OnAccept() 事件,而 CAsyncSocket 默认就能响应所有事件。
haitian99 2000-07-18
  • 打赏
  • 举报
回复
CSocket 限制太多,建议直接使用socket 函数或者CAsynScoket.
如果希望研究,我觉得 Samples中的chat 是直接使用CSocket的,更好一些。
pbi 2000-07-17
  • 打赏
  • 举报
回复
可以将你的代码贴出来吗?
hyzx2000 2000-07-17
  • 打赏
  • 举报
回复
在Visual Studio98的Samples中有一个HttpSvr程序,这是一个简单的Web服务器,你可以仔细的研究它一下,一定会获得很多收获。

16,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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