bool isSend = false;
Socket sendSocket;
while (!isSend)
{
sendSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
sendSocket.Connect(SocketIP, SocketPort);
}
catch
{
Error err = new Error();
err.WriteError(0, "/Data QClient /Id " + Num + " /QueueID " + FrmMain.strGueueNo + " /Subscribe " + strType + " ");
isSend = true;
sendSocket.Shutdown(SocketShutdown.Both);
sendSocket.Close();
FrmMsg msg = new FrmMsg("请确认网络是否正常或重新取号!");
msg.ShowDialog();
msg.Close();
msg.Dispose();
GoToLogin();
return;
}
if (sendSocket.Connected)
{
#region 发送数据
Encoding gb2312 = Encoding.GetEncoding("gb2312");
//byte[] buffer = gb2312.GetBytes("/Data QClient /Id Y0004 /QueueID " + FrmMain.strProjectNo + " /Subscribe True ");
byte[] buffer = gb2312.GetBytes("/Data QClient /Id " + Num + " /QueueID " + FrmMain.strGueueNo + " /Subscribe " + strType + " ");
int retc = sendSocket.Send(buffer);
if (retc == -1)
{
Error err = new Error();
err.WriteError(2, "/Data QClient /Id " + Num + " /QueueID " + FrmMain.strGueueNo + " /Subscribe " + strType + " ");
isSend = true;
sendSocket.Shutdown(SocketShutdown.Both);
sendSocket.Close();
FrmMsg msg = new FrmMsg("服务器忙!请重新取号");
msg.ShowDialog();
msg.Close();
msg.Dispose();
GoToLogin();
return;
}
#endregion
#region 获取数据
byte[] inOptionValues = new byte[4 * 3];
BitConverter.GetBytes((uint)1).CopyTo(inOptionValues, 0);
BitConverter.GetBytes((uint)1000).CopyTo(inOptionValues, 4);
BitConverter.GetBytes((uint)500).CopyTo(inOptionValues, 8);
sendSocket.IOControl(IOControlCode.KeepAliveValues, inOptionValues, null);
byte[] buffer_Call = new byte[sendSocket.ReceiveBufferSize];
sendSocket.ReceiveTimeout = 10000; //设置超时时间
try
{
int m_read = sendSocket.Receive(buffer_Call, SocketFlags.Partial);
System.Text.Encoding chs = System.Text.Encoding.GetEncoding("gb2312");
string str_Read = chs.GetString(buffer_Call, 0, m_read);
string[] str_split = str_Read.Split(',');
if (str_split[0] == "完成" && str_split[1] == strQueueNum) //评价
{
isSend = true;
sendSocket.Shutdown(SocketShutdown.Both);
sendSocket.Close();
}
else
{
Error err = new Error();
err.WriteError(1, "/Data QClient /Id " + Num + " /QueueID " + FrmMain.strGueueNo + " /Subscribe " + strType + " ");
isSend = true;
sendSocket.Shutdown(SocketShutdown.Both);
sendSocket.Close();
FrmMsg msg = new FrmMsg("服务器繁忙!请重新取号");
msg.ShowDialog();
msg.Close();
msg.Dispose();
GoToLogin();
return;
}
}
catch (Exception e) //捕捉超时这个事件g
{
Error err = new Error();
err.WriteError(1, "/Data QClient /Id " + Num + " /QueueID " + FrmMain.strGueueNo + " /Subscribe " + strType + " ");
isSend = true;
sendSocket.Shutdown(SocketShutdown.Both);
sendSocket.Close();
FrmMsg msg = new FrmMsg("请确认网络是否正常或重新取号");
msg.ShowDialog();
msg.Close();
msg.Dispose();
GoToLogin();
return;
}
#endregion
}