Socket——发送消息以及断线重连

bool b = true;
socket clientsocket = new socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ip = IPAddress.Parse(“192.168.1.100”);

private void Form1_Load(object sender, EventArgs e)
{

//关闭线程监视 这句话防止多线程调用出错挺好用的 但是还是尽量使用委托吧 这个不一定什么事报个奇葩错误 

Control.CheckForIllegalCrossThreadCalls = false;

//启动新线程执行连接方法 
Thread cc = new Thread(ClientConnect);
cc.IsBackground = true;
cc.Start();

}

 

/// <summary> 
/// 连接方法
/// </summary> 
/// <returns></returns>

public void ClientConnect()
{

//循环一下 如果连不上 就一直连 如果担心耗资源可以让线程在循环里休眠几秒钟
while (b)
{
try
{

//字符串转成字节数组
byte[] buffer = Encoding.UTF8.GetBytes(“StormStormStormStormStormStorm”);

//配置服务器IP与端口 进行连接

clientSocket.Connect(new IPEndPoint(ip, 1234)); 

//这个明显了 发送刚才的字节数组
clientSocket.Send(buffer);

//到这步都没报错基本就是ok了 那就不要循环连接了吧
b = false;
//启动新线程检测连接状态 这个是为了断线重连
Thread gs = new Thread(GetStaus);
gs.IsBackground = true;
gs.Start();
}
catch
{
b = true;
}
}
}

 

/// <summary> 
/// 发现断线重连的方法
/// </summary> 
/// <returns></returns> 
public void GetStaus()
{

//循环检测
while (true)
{

//五秒检测一次就够了

Thread.Sleep(500);

//判断连接状态
if (clientSocket.Connected == false)
{

//如果在这个方法里发现没有连接那就是中途断了 让全局变量b控制连接方法一直到连接成功
b = true;

//启动
Thread cc = new Thread(ClientConnect);
cc.IsBackground = true;
cc.Start();
}
}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值