CSocket的bind函数问题

warmyellow 2009-04-05 08:41:42
serversocket.Bind(curp->GetPort())
serversocket.Bind(1000)
这两个结果完全不同怎么回事,但是GetPort()返回的也是1000啊 但结果相差完全不同 但好像都没报错
UINT NetServer::GetPort(){
return m_port;
}
...全文
181 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
mengde007 2009-04-05
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 warmyellow 的回复:]
if(!serversocket.Socket())
[/Quote]
应该是serversocket.Create(1000)吧
CSocket的成员函数Create()在内部就自动bind()了,所以,楼主的不对啊
warmyellow 2009-04-05
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 Paradin 的回复:]
把其周围代码发上来看看。
[/Quote]
NetServer::NetServer(){
NetServer("127.0.0.1",1000,30000);
}

NetServer::NetServer(CString ip,UINT port/* =1000 */,int times/* =30000 */){
LPVOID temp=NULL;
this->m_port=port;
this->m_Ip=ip;
this->m_timeout=times;
this->m_isstop=true;
this->m_str=_T("");
this->m_opresult=false;
}
UINT NetServer::GetPort(){
return m_port;
}
UINT ServerRun(LPVOID argc){
CString str;
str.Format("%d",(int)(argc));
AfxMessageBox(str);
NetServer* curp=(NetServer*)argc;
CSocket serversocket;
if(!AfxSocketInit()){
AfxMessageBox(_T("套接字初始化问题!请重试!"));
return false;
}
if(!serversocket.Socket()){
AfxMessageBox(_T("套接字初始化问题!请重试!"));
return false;
}
CString sstr;
if(curp->GetPort()==1000)
str.Format("%d",curp->GetPort());
AfxMessageBox(sstr);
if(!serversocket.Bind(1000,curp->GetIp())){
AfxMessageBox(_T("端口绑定错误!请重试!"));
return false;
}
if(!serversocket.Listen(10)){
AfxMessageBox(_T("系统监听设置出现问题!请重试"));
return false;
}
curp->SetServerStop(false);
CSocket getsocket;
AfxGetApp()->m_pMainWnd->MessageBox(_T("dinga!"));
while(true){
if(curp->IsServerStop()){
AfxGetApp()->m_pMainWnd->MessageBox(_T("stop!"));
break;
}

if(!((serversocket).Accept(getsocket))){
continue;
}else{
char clientmsg[1024]={0};
getsocket.Receive(clientmsg,1024);
CString* str=curp->GetStrPoint();
*str=_T(clientmsg);
AfxGetApp()->m_pMainWnd->SendMessage(WM_CLIENTMSG,int(curp));
if(curp->GetOpResult()){
getsocket.Send("success",20);
}else{
getsocket.Send("fail",20);
}
}
curp->SetOpResult(false);
getsocket.Close();
}
serversocket.Close();
return 0;
}
Paradin 2009-04-05
  • 打赏
  • 举报
回复
把其周围代码发上来看看。
  • 打赏
  • 举报
回复
serversocket.Bind(curp->GetPort())
那应该是参数函数调用出问题,仔细对比参数类型。

serversocket.Bind(1000)
这样确定没问题是吧?
warmyellow 2009-04-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 blh 的回复:]
引用楼主 warmyellow 的帖子:
serversocket.Bind(curp->GetPort())
serversocket.Bind(1000)
这两个结果完全不同怎么回事,但是GetPort()返回的也是1000啊 但结果相差完全不同 但好像都没报错
UINT NetServer::GetPort(){
return m_port;
}


什么结果不同,你怎么知道

port = curp->GetPort();
serversocket.Bind(port);port 不是1000???
[/Quote]
serversocket.Bind(curp->GetPort())
建立的服务器虽然不报错,但是客户端无法访问
serversocket.Bind(1000)
这个却能访问
而且用前者在CMD下 netstat -a 没看见1000端口被监听
而后者却看到被监听了,再有我用if(curp->GetPort()==1000)判断了curp->GetPort()确实是1000
woods2001 2009-04-05
  • 打赏
  • 举报
回复
结果应该是相同的
Bind( UINT nSocketPort, LPCTSTR lpszSocketAddress = NULL );
bind函数第一个参数是UINT
如果你写的那个函数 返回的m_port也是UINT 那应该没啥错吧
楼主在仔细瞧瞧~
blh 2009-04-05
  • 打赏
  • 举报
回复
[Quote=引用楼主 warmyellow 的帖子:]
serversocket.Bind(curp->GetPort())
serversocket.Bind(1000)
这两个结果完全不同怎么回事,但是GetPort()返回的也是1000啊 但结果相差完全不同 但好像都没报错
UINT NetServer::GetPort(){
return m_port;
}
[/Quote]

什么结果不同,你怎么知道

port = curp->GetPort();
serversocket.Bind(port);port 不是1000???
warmyellow 2009-04-05
  • 打赏
  • 举报
回复
netstat -a没有监听1000程序,而且我用if(curp->GetPort()==1000)判断了curp->GetPort()确实是1000
  • 打赏
  • 举报
回复
serversocket.Bind(curp->GetPort())
结果不同?那最后绑定的端口是什么?怎么判断出来的。
mengde007 2009-04-05
  • 打赏
  • 举报
回复
等等,curp->GetPort()返回的是什么格式的。确定是int类型吗,
你应该检查一下,

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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