17,741
社区成员
发帖
与我相关
我的任务
分享
private void StartListening()
{
try
{
while (true)
{
Socket ClientSocket =server.Accept();
Thread ThreadClientService = new Thread(new ParameterizedThreadStart(ServiceClient));
ThreadClientService.IsBackground = true;
ThreadClientService.Start(ClientSocket);
}
}
catch
{
StatusContentLabel.Text = "终端不在线!";
}
}
// 当服务器端接收到一个来自客户端的连接请求后,它就打开一个ServiceClient()线程来服务客户端。
private void ServiceClient(object socket)
{
Socket client = (Socket)socket;
bool keepalive = true; //各个客户Socket线程存活的标识
while (keepalive)
{
byte[] DataFromSingleDTU=new byte[128];
try
{
client.Receive(DataFromSingleDTU, DataFromSingleDTU.Length, SocketFlags.None);
}
}
}
private static void ListenStart_Client()
{
//创建连接点,本地IP与CEMS实时数据通信端口
IPEndPoint AIPAndPort = new IPEndPoint(Class_Const.m_LOCALHOSTIP, Class_Const.m_DL_CEMSPORT_REALDATA);
if (m_client_socket != null)
{
m_client_socket.Close();
}
//创建SOCKET并连接
m_client_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
m_client_socket.Bind(AIPAndPort);
m_client_socket.Listen(10);
//进行侦听
while (true)
{
try
{
ANewSocket = m_client_socket.Accept();
//获取主机的IP与端口
string AIpAndPort = ANewSocket.RemoteEndPoint.ToString();
string AcontectIP = AIpAndPort.Substring(0, AIpAndPort.IndexOf(':'));
//判断链接iP是否为电力中心IP
if (Class_Const.m_DL_IP.IndexOf(AcontectIP) != -1)
{
bool AisNotExist = true;
for (int i = 0; i < Class_Const.m_DL_CEMS_Links.Count; i++)
{
if (Class_Const.m_DL_CEMS_Links[i].RemoteEndPoint.ToString().Contains(AcontectIP))
{
if (Class_CommonFun.CheckIsFluency(Class_Const.m_DL_CEMS_Links[i]))
{
AisNotExist = false;
break;
}
else
{
Class_Const.m_DL_CEMS_Links[i].Shutdown(SocketShutdown.Both);
Class_Const.m_DL_CEMS_Links[i].Close();
Class_Const.m_DL_CEMS_Links.Remove(Class_Const.m_DL_CEMS_Links[i]);
break;
}
}
}
//把IP放入连接IP集合
if (AisNotExist)
{
//新加
ANewSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
Class_Const.m_DL_CEMS_Links.Add(ANewSocket);
Class_Log.ShowLogInWindow(string.Format("CEMS电力数据调度:{0}已经连接成功", AcontectIP), 2);
Thread AlistenTime = new Thread(new ThreadStart(ReceiveTimeCommand));
AlistenTime.Name = AIpAndPort;
AlistenTime.Start();
}
else
{
ANewSocket.Shutdown(SocketShutdown.Both);
ANewSocket.Close();
}
}
else
{
ANewSocket.Shutdown(SocketShutdown.Both);
ANewSocket.Close();
}
}
catch (Exception ex)
{
Class_Log.ShowLogInWindow(string.Format("CEMS实时监听错误:{0}", ex.ToString()), 1);
}
}
}
catch (Exception ex)
{
Class_Log.ShowLogInWindow(string.Format("CEMS实时数据监听绑定出错:{0}", ex.ToString()), 1);
}