110,538
社区成员
发帖
与我相关
我的任务
分享
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;
}
}