求一个C# socket自动重新连接服务器的例子

编程爱好者L 2010-10-14 10:43:10
网络中断socket连接断开,当网络连接上后如何让socket重新自动连接服务器.
...全文
1017 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
lailaihuihuiaaa 2011-11-22
  • 打赏
  • 举报
回复
上面那个例子不错,虽然看不大懂 哈哈
freefei 2010-10-14
  • 打赏
  • 举报
回复
关注。
yyd021 2010-10-14
  • 打赏
  • 举报
回复
留爪,过来搭便车等回复
编程爱好者L 2010-10-14
  • 打赏
  • 举报
回复
求个简单的例子...............
yjl49 2010-10-14
  • 打赏
  • 举报
回复
是否需要重连应该是由你业务中引起才对,并不需要在连接那一块写个循环去搞。比如你要发送数据给对方服务器,在之前会先连上去,然后业务在发送数据时去判断连接是否正常,不正常则reopen。
编程爱好者L 2010-10-14
  • 打赏
  • 举报
回复
不太明白额,连接断开,我就死循环重新调用了那个重连的方法,但是这样还是连接不上...
guts_2000 2010-10-14
  • 打赏
  • 举报
回复
while(true)

//死循环

这样不断的发包。
龍月 2010-10-14
  • 打赏
  • 举报
回复
应该有个循环 一直不停的监控 连接状态。
发现断开不停的连接 直到成功
lilin8905 2010-10-14
  • 打赏
  • 举报
回复
编程爱好者L 2010-10-14
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 yjl49 的回复:]
引用 5 楼 qq123592624 的回复:
求个简单的例子...............


C# code


public class MySocket
{
Socket m_socket = null;
public string server_ip;
public int server_port;


public Socket create……
[/Quote]
Thanks 学到点东东 呵呵.....
yjl49 2010-10-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 qq123592624 的回复:]
求个简单的例子...............
[/Quote]


public class MySocket
{
Socket m_socket = null;
public string server_ip;
public int server_port;


public Socket createClientSocket()
{
//在这里利用上面的IP和PORT建立到服务器的连接。
//成功返回对应的Socket
//失败则返回null;
}

public bool connect()
{
//在这里调用上面的连接方法
m_socket = null;
m_socket =createClientSocket();

if(m_socket == null)
{
return false;
}

return true;
}

publice bool reconnect()
{
//还和上面一样调那个方法
}

///专门用来发送数据的方法
publice int sendData()
{
//在这里,发送数据前就要调用下面的函数检查Socket的状态
bool ret = true;
bool isConnected = false;
bool isRead = false;
bool isWrite = false;
bool isError = false;
int avalSize =0;

ret =checkSocket(ref isConnected,ref isRead,ref isWrite,ref isError,ref avalSize);
if( ret = false
|| isConnected == false
|| isErr == true
|| (isRead == true && AvailableSize == 0
)
{
//这里就调用那个重联的
reconnect();
}

//完毕后再检查一遍,看这次连上了没
ret =checkSocket(ref isConnected,ref isRead,ref isWrite,ref isError,ref avalSize);
if( ret = false
|| isConnected == false
|| isErr == true
|| (isRead == true && AvailableSize == 0
)
{
//仍没有连上的话就要交由业务部分去判断怎么办了。最好是把要发送的数据放进一个队列里
//然后在业务部分建一线程去取,再调用MySocket来发。发失败就再放回队列中,有一定的时间
// 间隔就行了。如次一来就实现了重连,并且数据不丢失。
}

}

///再有一个检查Socket状态的方法
public bool checkSocket(
ref bool isConnected,
ref bool isRead,
ref bool isWrite,
ref bool isError,
ref int avalSize
)
{
bool ret = true;
try
{
isConnected= m_Soket.Connected;
isRead= m_Soket.Poll(50, SelectMode.SelectRead);
avalSize = m_Soket.Available;
isWrite= m_Soket.Poll(50, SelectMode.SelectWrite);
isError= m_Soket.Poll(50, SelectMode.SelectError);
}
catch (Exception e)
{
ret =false;
}
return ret;
}
}
编程爱好者L 2010-10-14
  • 打赏
  • 举报
回复
就像QQ那样网络终端再次连接的时候QQ就会自动连接...
Rock870210 2010-10-14
  • 打赏
  • 举报
回复
写个定时器,然后检查连接是否通畅,如果是断开就发送连接请求
编程爱好者L 2010-10-14
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 shaoadams 的回复:]
用ping实现

package com.csdn.test;
  import java.io.BufferedReader;
  import java.io.IOException;
  import java.io.InputStreamReader;
  public class test {
  static BufferedReader bufferedReader;
……
[/Quote]
我也是写在try里,连接中断时捕捉异常重新连接,但是连不上...
ShaoAdams 2010-10-14
  • 打赏
  • 举报
回复
用ping实现

package com.csdn.test;
  import java.io.BufferedReader;
  import java.io.IOException;
  import java.io.InputStreamReader;
  public class test {
  static BufferedReader bufferedReader;
  public static void main(String[] args) throws IOException {
  try {
  Process process = Runtime.getRuntime().exec("ping 192.168.1.104");//判断是否连接的IP;
  bufferedReader = new BufferedReader(new InputStreamReader(process
  .getInputStream()));
  String connectionStr = "";
  while ((connectionStr = bufferedReader.readLine()) != null) {
  System.out.println(connectionStr);
  }
  } catch (IOException e) {
  e.printStackTrace();
  } finally {
  bufferedReader.close();
  }
  }
  }

其实在通过socket.getoutstream和socket.getinputstream流对客户端发送、接受信息时如果socket没连接上是会抛出异常的,这也就是为什么Java会要求网络编程都要写在try里面,所以只要在catch里面写入客户端退出的处理就行了,没必要专门去想什么方法

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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