实际工程经常会碰到在局域网内进行消息传递,如IOT控制,工控机控制等。本文描述了如何在利用socket通信方式在服务器端和客户进行消息传递。为了保证服务端时刻监听客户端发来的消息,在服务端设立service的功能。该文章涉及的技术要点:
- 利用Socket在服务端和客户端进行消息传递;
- 在本地启用Service的功能时刻监听客户的响应;
1. 创建服务端工程文件(service)
(1). 创建SocketService的类,要在服务端单独启动一个监听线程。为了验证能正确收到信息,在监听线程中增加了保存txt文件的功能。就是说如果服务端收到客户端发送的信息会在本地保存为txt文件。该服务功能可以接收局域网内任何IP发送过来的信息,但通信端口要保证服务端和客户端一致。
using System;
using System.Net.Sockets;
using System.Net;
using System.Text;
using System.Threading;
using System.IO;
namespace SocketService
{
public class TcpServer
{
private TcpListener tcpListener;
private Thread listenThread;
private int heartbeatInterval;
private string txtFilePath = "c:\\Temp";
private string fileName = "ReceivedString.txt";
public TcpServer(int port, int heartbeatIntervalInSeconds)
{
IPAddress ipAddress = IPAddress.Any;
//IPAddress ipAddress = IPAddress.Parse("192.168.1.5");
tcpListener = new TcpListener(ipAddress, port);
heartbeatInterval = heartbeatIntervalInSeconds * 1000;
}
public void Start()
{
tcpListener.Start();
Console.WriteLine("服务端已启动,等待客户端连接...");
listenThread = new Thread(new ThreadStart(ListenForClients));
listenThread.Start();
}
private void ListenForClients()
{
while (true)
{
TcpClient client = tcpListener.AcceptTcpClient();
Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClientCommunication));
clientThread.Start(client);
}
}
private void HandleClientCommunication(object client)
{
TcpClient tcpClient = (TcpClient)client;
string clientEndPoint = tcpClient.Client.RemoteEndPoint.ToString();