TCP和服务器断开连接后重连怎么处理

zk5856 2010-11-09 03:37:56
和服务器连接有时会断线 断线之后不知道怎么施放原来的socket
这是我的初始化
void CPVZNetMsgMng::NetStartNet()
{

//初始化环境
WSADATA WsaData;
WORD Version=MAKEWORD(2,2);
WSAStartup(Version,&WsaData);
//建立socket
m_sMainSocket=socket(AF_INET,SOCK_STREAM,0);
sockaddr_in ReceiveAddr;
ZeroMemory(&ReceiveAddr,sizeof(ReceiveAddr));
ReceiveAddr.sin_family=AF_INET;
ReceiveAddr.sin_port=htons(8899);
ReceiveAddr.sin_addr.s_addr=inet_addr("219.134.186.3");
//ReceiveAddr.sin_addr.s_addr=inet_addr("192.168.1.138");
int SetupStat=connect(m_sMainSocket,(sockaddr*)&ReceiveAddr,sizeof(ReceiveAddr));
if (SetupStat==SOCKET_ERROR)
{
return;
}

}
断线之后
是否要WSACleanup();?
如果用原来的socket该怎么处理施放
我是这样做的
WSACleanup();
NetStartNet();
貌似连不上...
请教达人帮助 谢谢
...全文
1155 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zk5856 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 visualeleven 的回复:]
http://blog.csdn.net/annhf/archive/2006/09/15/1225362.aspx
[/Quote]
谢谢了 我去试试之后重新绑定 我上面那个写的没问题吧
zk5856 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 visualeleven 的回复:]
setsockopt(.., SO_REUSEADDR,...);
释放连接调用closesocket关闭套接字
[/Quote]
是不是先
setsockopt(m_sMainSocket,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));
然后
sockaddr_in ReceiveAddr;
ZeroMemory(&ReceiveAddr,sizeof(ReceiveAddr));
ReceiveAddr.sin_family=AF_INET;
ReceiveAddr.sin_port=htons(8899);
ReceiveAddr.sin_addr.s_addr=inet_addr("192.168.1.138");
int SetupStat=connect(m_sMainSocket,(sockaddr*)&ReceiveAddr,sizeof(ReceiveAddr));
就重新连了?
superhanxin5 2010-11-10
  • 打赏
  • 举报
回复
标记一下~
Eleven 2010-11-10
  • 打赏
  • 举报
回复
setsockopt(.., SO_REUSEADDR,...);
释放连接调用closesocket关闭套接字
zk5856 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 980333 的回复:]
Uint WINAPI conn(PVOID p)
{
CloseSocket(m_sMainSocket);
m_sMainSocket=socket(AF_INET,SOCK_STREAM,0);
if(connect(m_sMainSocket,(sockaddr*)&ReceiveAddr,sizeof(ReceiveAddr) == SOCKET_ERROR)
……
[/Quote]
只要关闭套接字之后再次连接就行了是吧
尘小陌 2010-11-09
  • 打赏
  • 举报
回复
Uint WINAPI conn(PVOID p)
{
CloseSocket(m_sMainSocket);
m_sMainSocket=socket(AF_INET,SOCK_STREAM,0);
if(connect(m_sMainSocket,(sockaddr*)&ReceiveAddr,sizeof(ReceiveAddr) == SOCKET_ERROR)
{
AfxBeginThread(conn,0);
return 0
}
AfxBeginThread(连接后要进行的事务相关的线程,0);
return 0;
}

....
如果断网,就启动conn线程
......

以上代码写的时候没管语法,你只要知道这个意思就行了
xgPaul 2010-11-09
  • 打赏
  • 举报
回复
可以考虑直接关闭套接字后,重新创建套接字进行连接。。。
哇咔咔loveshh 2010-11-09
  • 打赏
  • 举报
回复
断开重连是通过客户端也服务器端互发心跳包来实现的
zk5856 2010-11-09
  • 打赏
  • 举报
回复
自己顶上去
zk5856 2010-11-09
  • 打赏
  • 举报
回复
自己顶上去
网上看了看是不是这样就ok
setsockopt(m_sMainSocket,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));

18,363

社区成员

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

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