110,538
社区成员
发帖
与我相关
我的任务
分享
///开始监听
private void StartTCP()
{
try
{
//创建监听服务器,采用TCP协议
m_TCPSocketServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//创建监听端口,服务器上任何IP的指定端口都监听
int nPort = int.Parse(CXml.GetParameter("TcpPort"));
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, nPort);
//绑定并监听指定的地址
m_TCPSocketServer.Bind(ipEndPoint);
m_TCPSocketServer.Listen(100);
//接收请求客户端
m_TCPSocketServer.BeginAccept(new AsyncCallback(OnTCPAccept), null);
}
catch (Exception ex)
{
m_Log.Error(ex.Message + " StartTCP");
}
}
///接收客户端的请求
private void OnTCPAccept(IAsyncResult ar)
{
try
{
Socket clientSocket = m_TCPSocketServer.EndAccept(ar);
//完成接收后,开始等待后续的请求接入
m_TCPSocketServer.BeginAccept(new AsyncCallback(OnTCPAccept), null);
//一旦建立连接,那么开始接收客户端发送的信息
clientSocket.BeginReceive(byteDataTcp, 0, byteDataTcp.Length, SocketFlags.None,
new AsyncCallback(OnTCPReceive), clientSocket);
}
catch (Exception ex)
{
m_Log.Error(ex.Message + " OnTCPAccept");
}
}
///接收设备发送的数据信息
private void OnTCPReceive(IAsyncResult ar)
{
Socket clientSocket = (Socket)ar.AsyncState;
label5.Text = "接收";
try
{
int read = clientSocket.EndReceive(ar);
//read为0的话表明已经断开,大于0的话获取接收数据后继续监听
if (read > 0)
{
////获取客户端发来的信息
dataBag.AddRange(byteDataTcp);
byte[] message = dataBag.ToArray(); //需要发送的信息
WatchMessage msgReceived = new WatchMessage(message);
switch (msgReceived.Command)
{
case "CONNECT":
//创建客户
DealWithTcpClient(msgReceived.DeviceID);
//txtShow.Text = txtShow.Text + "\r\n" + "收到数据:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":" + msgReceived.ReceiveMessage;
message=msgReceived.ToByte();
Thread.Sleep(100);
//回发数据给客户端
clientSocket.BeginSend(message, 0, message.Length, SocketFlags.None, new AsyncCallback(OnTCPSend), clientSocket);
m_ACount++;
label7.Text = m_ACount.ToString();
break;
case "PING":
break;
case "LCSINFO":
DealWithTcpClient(msgReceived.GpsData.DeviceID);
//txtShow.Text = txtShow.Text + "\r\n" + DateTime.Now.ToString("HH:mm:ss") + ":" + msgReceived.ReceiveMessage;
m_BCount++;
label8.Text = m_BCount.ToString();
if (msgReceived.GpsData.GpsEffective)
{
//插入数据位置信息
SaveDataBase(msgReceived.GpsData);
}
break;
}
byteDataTcp=new byte[1024];
dataBag.Clear();
//继续接收数据
clientSocket.BeginReceive(byteDataTcp, 0, byteDataTcp.Length, SocketFlags.None, new AsyncCallback(OnTCPReceive), clientSocket);
}
}
catch (Exception ex)
{
dataBag.Clear();//清空数据包中的元素
m_Log.Error(ex.Message + " OnTCPReceive");
}
}
/// <summary>
/// TCP数据接收回发
/// </summary>
/// <param name="ar"></param>
public void OnTCPSend(IAsyncResult ar)
{
try
{
Socket client = (Socket)ar.AsyncState;
client.EndSend(ar);
}
catch (Exception ex)
{
m_Log.Error(ex.Message + " OnTCPSend");
}
}