情景:
仪器为客户端,需要编写服务器用来接收仪器传输的数据 ,并解析出所需要的内容
示例:
仪器配置 服务端 ip:192.168.0.25 端口: 5051
服务端则编写如下:
声明变量
private int port;//监听端口号
private static byte[] result = new byte[1024];
private static Socket server;//服务器Socket
private IPAddress ip;//Ip地址
private static Socket Client;//客户端Socket
private Thread receiveThread;
private Thread dataThread;
// 全局变量
int bytes = 0;
string str = string.Empty; // 接收到的数据
byte[] DataByte = null;
int buff = 100000000;
start()
public void Start()
{
try
{
// 格式化IP Port
IPAddress localIP = IPAddress.Parse(192.168.0.25);
IPEndPoint ipe = new IPEndPoint(localIP, 5051);
// 创建 TCP连接的Socket
server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// server.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
server.Bind(ipe); //配置服务器IP与端口
server.Listen(20);
// 启动数据接收线程
dataThread = new Thread(new ThreadStart(ListenClientConnect));
//将窗体线程设置为与后台同步,随着主线程结束而结束
dataThread.IsBackground = true;
dataThread.Start();
}
catch (Exception e)
{
this.Stop();
}
}
stop()
public void Stop()
{
try
{
if (Client != null)
{
if (Client.Connected)
{
Client.Shutdown(SocketShutdown.Both);
}
Client.Close();
}
if (server != null)
{
if (server.Connected)
{
server.Shutdown(SocketShutdown.Both);
}
server.Close();
}
}
catch (Exception ex)
{
return;
}
}
ListtnClientConnect()
private void ListenClientConnect()
{
try
{
while (true)
{
Client = server.Accept();
receiveThread = new Thread(GetData);
receiveThread.Start(Client);
}
}
catch(Exception ex)
{
}
}
Getdata()
private void GetData(object clientSocket)
{
Client = (Socket)clientSocket;
while (true)
{
try
{
DataByte = new byte[buff];
bytes = Client.Receive(DataByte, DataByte.Length, 0);
if (bytes> 0)
{
//获取仪器传输过来的数据
str = Encoding.Default.GetString(DataByte, 0, bytes);
//回传数据给仪器(如果需要回传信息则需要仪器厂商提供回传格式)
Client.Send("回传仪器的内容");
//解析仪器传过来的数据
this.str = string.Empty;
}
}
catch (Exception ex) // 主动关闭Server receve函数会抛出异常
{
break;
}
}
}