求救!~!~!服务器端开始侦听之后,为什么有时候客户端老是会出现连接失败????/?? 吾写的这个基于Socket的聊天程序还是有一点问题如下,望赐教:就是服务器端开始侦听之后,客户端本来通过IP连接应该没问题的,为什么有时候老是会出现连接失败,而且这种情况出现的几率还比较大这是为什么呢,是网络问题还是别的什么?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你连接的时候是不是没有新开一个Socket用来接受连接,而是直接用侦听的那个Socket连接了。那样你在重复连接的时候会因为已经没有侦听的Socket而出现连接错误。 不是啊服务端有一个Socket用于侦听,然后用另一个Socket用于连接是不是没有做链表会出现这样的情况?比如说客户端和服务端同时开程序,服务端侦听,如果此时客户端连接的话可能成功的机率较大但是如果客户端关掉程序重新开启再连接就很可能不行了.还有就是客户端和服务端本来已经连接好的,但放那一段时间不动它的话就连不上了,断了!连接为什么这么不稳定?? 以下是两个函数:侦听和连接处理函数:我觉得应该是侦听函数在简单了,但不知道本质问题出在什么地方,望指教!void CSockDlg::OnListen() { // TODO: Add your control notification handler code here m_server.Create(1000); m_server.Listen();}void CSockDlg::ShowAccept(){ m_server.Accept(m_recv); m_serfile.open("Server.txt",ios::out|ios::ate); m_listen.EnableWindow(FALSE); m_connect.EnableWindow(FALSE); m_ipctrl.EnableWindow(FALSE); m_send.EnableWindow(TRUE); AfxMessageBox("server端连接成功!"); m_serflag=TRUE;} 另一个用于连接Socket应该new一个新的Socket进行接受连接. CTcpSocket* pSocket=new CTcpSocket(this); if(m_pListen->Accept(*pSocket)) { m_lstConnectionList.AddTail(pSocket); CString strWork="有连接进来!"; mstr.AddTail(strWork); Invalidate(); } else { delete pSocket; pSocket=NULL; } m_recv这也是与侦听连接相异的socket啊这与上面有什么区别吗?? 郁闷了 使用WTL8.0写出的程序不能在win2000上跑,需要GDIplus.dll VC++ 如何给自己的程序创建快捷键 WM_PAINT重画无效区。可是通常是在OnPaint只是一个完整的重画代码啊! Winsock 2 SPI中在WSARecv()函数中如何截获网页的数据并保存在TXT文件中 如何设置手形光标? 求购成熟的信息采集软件 静态分割两行后,这个语句没有反应, 如何生成多节点xml文件 关于MAPISendMail()的使用 Delphi中的publish相当于VC中的protected吗? socket连接IIS服务器 如何使STATIC控件的背景透明?
是不是没有做链表会出现这样的情况?
比如说客户端和服务端同时开程序,服务端侦听,如果此时客户端连接的话可能成功的机率较大
但是如果客户端关掉程序重新开启再连接就很可能不行了.
还有就是客户端和服务端本来已经连接好的,但放那一段时间不动它的话就连不上了,断了!
连接为什么这么不稳定??
我觉得应该是侦听函数在简单了,但不知道本质问题出在什么地方,望指教!
void CSockDlg::OnListen()
{
// TODO: Add your control notification handler code here
m_server.Create(1000);
m_server.Listen();
}
void CSockDlg::ShowAccept()
{
m_server.Accept(m_recv);
m_serfile.open("Server.txt",ios::out|ios::ate);
m_listen.EnableWindow(FALSE);
m_connect.EnableWindow(FALSE);
m_ipctrl.EnableWindow(FALSE);
m_send.EnableWindow(TRUE);
AfxMessageBox("server端连接成功!");
m_serflag=TRUE;
}
if(m_pListen->Accept(*pSocket))
{
m_lstConnectionList.AddTail(pSocket);
CString strWork="有连接进来!";
mstr.AddTail(strWork);
Invalidate();
}
else
{
delete pSocket;
pSocket=NULL;
}
这与上面有什么区别吗??