关于socket收数据的问题?

ratinwander 2004-05-14 10:32:39
我也来顶一下,顺便问个问题啊?:(
为什么?我的socket连接上后就是收不到数据,错误号10038---->socket无效,大家看看我的代码
好嘛,郁闷死了:(
LRESULT CRundllDlg::OnStMessage(WPARAM wParam,LPARAM lParam){
switch(lParam)
{
case FD_ACCEPT:
int tmp;
tmp=sizeof(client);
if(this->ss=accept(this->Server_sock,(SOCKADDR*)&client,&tmp)==INVALID_SOCKET )
{
AfxMessageBox("accept fialed");
}
AfxMessageBox(_itoa(ntohs(client.sin_port),a,10));//这里弹出的内容是正确的
AfxMessageBox(inet_ntoa(client.sin_addr));
break;
case FD_READ:
//fd_set fdr;
//FD_ZERO(&fdr);
//FD_SET(ss,&fdr);
while(1)
{
char a[10];
Len=recv(this->ss,abuffer,sizeof(abuffer),0);
if(Len==SOCKET_ERROR){
int temp=GetLastError();
AfxMessageBox(_itoa(temp,a,10));
break;
}
if(Len>0)
{
AfxMessageBox("Write");
}
}
break;}
return false;
}
客户端发送是成功的,难道在accept时还要做什么操作?小弟第1次用socket又没书(我看书上也就这么写的:))请高人指点指点啊?谢谢
最好在给点代码啊,:)
...全文
62 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ratinwander 2004-05-14
  • 打赏
  • 举报
回复
问题解决了,PiggyXP(什么也不说)对头,马上给分
ratinwander 2004-05-14
  • 打赏
  • 举报
回复
accept函数返回不是1个新的socket吗?然后收数据应该用这个连接上的socket接受啊?
而原来的那个socket(也就是this->Server_sock)继续监听啊?FD_READ是窗口消息啊?
发给窗口的?为说清楚点,我把我知道说一下(全是书上说的,代码也是考的):

先加载dll,然后创建监听sock(也就是server_sock),做好select机制,然后绑定,然后监听
当有连接来时调用accept函数返回1个新socket(也就是ss,client 结构保存连接端信息)弹出的内容是正确,然后就开始用ss去收发数据,问题来了,客户端能发送数据,但是服务器端崂是出错!
cnpeople 2004-05-14
  • 打赏
  • 举报
回复
跟终看看ss在什么地方发生变化的?
PiggyXP 2004-05-14
  • 打赏
  • 举报
回复
哦哈哈哈哈哈哈哈哈

看了好久终于看出错哪里了^_^

if(this->ss=accept(this->Server_sock,(SOCKADDR*)&client,&tmp)==INVALID_SOCKET )
// 这里应该是两个等号吧 ==

呵呵所以系统会说 this->ss是个无效的套接字,其他地方都没有问题了^_^
PiggyXP 2004-05-14
  • 打赏
  • 举报
回复
哦哈哈哈哈哈哈哈哈

看了好久终于看出错哪里了^_^

if(this->ss=accept(this->Server_sock,(SOCKADDR*)&client,&tmp)==INVALID_SOCKET )
// 这里应该是两个等号吧 ==

呵呵所以系统会说 this->ss是个无效的套接字,其他地方都没有问题了^_^
PiggyXP 2004-05-14
  • 打赏
  • 举报
回复
楼主确认已经连接成功了?

AfxMessageBox(_itoa(ntohs(client.sin_port),a,10));//这里弹出的内容是正确的
AfxMessageBox(inet_ntoa(client.sin_addr));

可以正确的显示地址以及端口号了?

实在看不出错哪里了我再想想:)
fzd999 2004-05-14
  • 打赏
  • 举报
回复
导致这个错误的原因是,这个Socket不是侦听套接字。
Len = recv(this->Server_sock, abuffer, sizeof(abuffer), 0);

visualabc 2004-05-14
  • 打赏
  • 举报
回复
this->ss改this->Server_sock

http://www.vctop.com/View.Asp?ID=489&CateID=1
Eearbird 2004-05-14
  • 打赏
  • 举报
回复
检查一下函数OnStMessage中处理的FD_READ消息是this->ss这个Socket的吗?

18,356

社区成员

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

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