厂家没提供范例 我将自己写的共享出来 将模块设置到TCP-SERVER模式下
每一页都要 点读取参数
开关 继电器1的代码 在VS2013下测试通过
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.IO;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
/****************************************************************************************/
public byte[] StringToHex(string sendData)
{//string转Hex
string[] strArray = sendData.Split(new char[] { ',', ',', '\r', '\n', ' ', '\t' });
int decNum = 0;
int i = 0;
byte[] sendBuffer = new byte[strArray.Length]; //发送数据缓冲区
foreach (string str in strArray)
{
try
{
decNum = Convert.ToInt16(str, 16);
sendBuffer[i] = Convert.ToByte(decNum);
i++;
}
catch
{
//MessageBox.Show("字节越界,请逐个字节输入!", "Error");
}
}
return sendBuffer;
}
/****************************************************************************************/
public string HexToString(byte[] data)
{//Hex转String
StringBuilder sb = new StringBuilder(data.Length * 3);
foreach (byte b in data)
{
sb.Append(Convert.ToString(b, 16).PadLeft(2, '0').PadRight(3, ' '));
}
return sb.ToString().ToUpper();
}
//TCP Client 接收 *************************************************************************
private void TCP_Receive(object obj)
{
Control.CheckForIllegalCrossThreadCalls = false;
Socket socket_R = tcpClient.Client;
NetworkStream ns = tcpClient.GetStream();
int MaxLen = socket_R.ReceiveBufferSize;
while (true)
{
//System.Threading.Thread.Sleep(1);
if (ns.CanRead)
{
string s = Get_TCP_Data(socket_R, 100, MaxLen);
if (s.Length != 0)
{
RX_Pack++;
string display = "\r\nReceive:" + s + "\r\n";
textBox3.Text += display;
this.textBox3.SelectionStart = this.textBox3.Text.Length;
this.textBox3.ScrollToCaret();
label6.Text = RX_Pack.ToString();
label8.Text = RX_Byte.ToString();
}
}
}
}
// 获取TCP数据 ****************************************************************************
public string Get_TCP_Data(Socket socket, int timeout, int max_len)
{
string result = string.Empty;
socket.ReceiveTimeout = timeout;
byte[] buffer = new byte[max_len];
List<Byte> data = new List<Byte>();
data.Clear();
int length = 0;
try
{
while ((length = socket.Receive(buffer)) > 0)
{
for (int i = 0; i < length; i++)
{
data.Add(buffer[i]);
}
break;
}
}
catch
{
}
if ((data != null) && (data.Count > 0))
{
RX_Byte += data.Count;
result = HexToString(data.ToArray());
}
return result;
}
TcpClient tcpClient;
Thread TCP_Rev_T;
int RX_Pack = 0;
int RX_Byte = 0;
private void button1_Click(object sender, EventArgs e)
{
if (button1.Text == "连接")
{
tcpClient = new TcpClient();
string ServerIP = "192.168.0.80";
string ServerPort = "10123";
button1.Text = "等待连接";
try
{
var result = tcpClient.BeginConnect(IPAddress.Parse(ServerIP), Int32.Parse(ServerPort), null, null);
var sucess = result.AsyncWaitHandle.WaitOne(TimeSpan.FromSeconds(3));
if (sucess)
{
tcpClient.NoDelay = true;
TCP_Rev_T = new Thread(TCP_Receive);
TCP_Rev_T.Start();
button1.Text = "断开";
}
else
{
tcpClient.Close();
textBox3.Text = "连接超时,未连接到指定服务器,请检查连接";
button1.Text = "连接";
}
button1.Enabled = true;
}
catch
{
MessageBox.Show("连接错误,请检查服务器IP与端口号");
button1.Text = "连接";
button1.Enabled = true;
}
}
}
private void button开继电器1_Click(object sender, EventArgs e)
{
string TCP_Send = "11 05 00 00 FF 00 8E AA";//读取用户的输入
NetworkStream ns = tcpClient.GetStream();
if (ns.CanWrite)
{
Byte[] sendBytes = null;
sendBytes = StringToHex(TCP_Send);
ns.Write(sendBytes, 0, sendBytes.Length);
}
}
private void button关继电器1_Click(object sender, EventArgs e)
{
string TCP_Send = "11 05 00 00 00 00 CF 5A ";//读取用户的输入
NetworkStream ns = tcpClient.GetStream();
if (ns.CanWrite)
{
Byte[] sendBytes = null;
sendBytes = StringToHex(TCP_Send);
ns.Write(sendBytes, 0, sendBytes.Length);
}
}
}
}