📄 form1.cs
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
[DllImport("DTUSet.dll")]
static extern Int32 DTU_AddCOM(Int32 comindex, Int32 baud, Int32 databits, Int32 checkbits, Int32 stopbits);
//用于远程配置
[DllImport("DTUSet.dll")]
static extern Int32 DTU_AddNetServer([MarshalAs(UnmanagedType.LPStr)] string szip,
Int32 localport, [MarshalAs(UnmanagedType.LPStr)] string szpwd);
[DllImport("DTUSet.dll")]
static extern Int32 DTU_GetNewConnectedClient(Int32 hServerDTU);
[DllImport("DTUSet.dll")]
static extern Int32 DTU_GetClientInfo(Int32 hServerDTU, ref byte pszdesip, ref Int32 pdesport,
ref byte sztype, ref byte szname, ref byte szid, ref byte szphone);
[DllImport("DTUSet.dll")]
static extern Int32 DTU_IsClientAvailable(Int32 hServerDTU);
[DllImport("DTUSet.dll")]
static extern Int32 DTU_SendData(Int32 hServerDTU, ref byte pdata, Int32 len);
[DllImport("DTUSet.dll")]
static extern Int32 DTU_ReceiveData(Int32 hServerDTU, ref byte pdata, Int32 len);
[DllImport("DTUSet.dll")]
static extern Int32 DTU_GetReceiveDataCount(Int32 hServerDTU);
[DllImport("DTUSet.dll")]
static extern Int32 DTU_GetAllConfig(Int32 hServerDTU);//用于一次性获取所有配置信息,和DTU_GetConfig一起配合使用
[DllImport("DTUSet.dll")]
static extern Int32 DTU_GetConfig(Int32 hServerDTU, [MarshalAs(UnmanagedType.LPStr)] string szcmd,
ref byte szdata);
[DllImport("DTUSet.dll")]
static extern Int32 DTU_Init(Int32 hServerDTU);//必须在主线程中调用
[DllImport("DTUSet.dll")]
static extern Int32 DTU_EnterConfig(Int32 hServerDTU);
[DllImport("DTUSet.dll")]
static extern Int32 DTU_ConfigRead(Int32 hServerDTU, [MarshalAs(UnmanagedType.LPStr)] string szcmd,
ref byte szdata);
[DllImport("DTUSet.dll")]
static extern Int32 DTU_ConfigWrite(Int32 hServerDTU, [MarshalAs(UnmanagedType.LPStr)] string szcmd,
[MarshalAs(UnmanagedType.LPStr)] string szdata);
[DllImport("DTUSet.dll")]
static extern Int32 DTU_ExitConfig(Int32 hServerDTU, Int32 wait);
[DllImport("DTUSet.dll")]
static extern Int32 DTU_Uninit(Int32 hServerDTU);//必须在主线程中调用
[DllImport("DTUSet.dll")]
static extern void DTU_Delete(Int32 hServerDTU);
public Form1()
{
InitializeComponent();
}
private Int32 m_hServer = 0;
private Int32 m_hDTU = 0;
private void BtnServer_Click(object sender, EventArgs e)
{
string s = textPort.Text;
if(m_hServer == 0) // local port has not started
{
m_hServer = DTU_AddNetServer("", System.Convert.ToInt32(s), "");
if (DTU_Init(m_hServer) == 0)
{
DTU_Uninit(m_hServer);
DTU_Delete(m_hServer);
m_hServer = 0;
MessageBox.Show("无法启动" + s + "服务端口", "错误",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return;
}
BtnServer.Text = "停止服务";
timer100.Enabled = true;
}
else // local port has started
{
if(m_hDTU != 0)
{
DTU_Uninit(m_hDTU);
DTU_Delete(m_hDTU);
m_hDTU = 0;
}
DTU_Uninit(m_hServer);
DTU_Delete(m_hServer);
m_hServer = 0;
timer100.Enabled = false;
listClient.Items.Clear();
BtnServer.Text = "启动服务";
}
}
private void Form1_Load(object sender, EventArgs e)
{
textPort.Text = "51236";
listClient.View = View.Details;
listClient.Columns.Add("IP", 115, HorizontalAlignment.Center);
listClient.Columns.Add("端口", 45, HorizontalAlignment.Center);
listClient.Columns.Add("句柄", 55, HorizontalAlignment.Center);
//ListViewItem lv = new ListViewItem();
//lv = listClient.Items.Insert(listClient.Items.Count, "192.168.0.1");
//lv.SubItems.Add("2356");
//lv.SubItems.Add("4567");
}
private void timer100_Tick(object sender, EventArgs e)
{
Int32 m_hClient /*= new Int32()*/;
if(m_hServer != 0)
{
m_hClient = DTU_GetNewConnectedClient(m_hServer);
if (m_hClient != 0)
{
byte[] szdesIP = new byte[20];
Int32 desPort = new Int32();
byte[] sztype = new byte[20];
byte[] szName = new byte[30];
byte[] szID = new byte[20];
byte[] szPhone = new byte[20];
DTU_GetClientInfo(m_hClient, ref szdesIP[0], ref desPort, ref sztype[0],
ref szName[0], ref szID[0], ref szPhone[0]);
ListViewItem lv = new ListViewItem();
lv = listClient.Items.Insert(listClient.Items.Count, System.Text.Encoding.ASCII.GetString(szdesIP));
lv.SubItems.Add(System.Convert.ToString(desPort));
lv.SubItems.Add(System.Convert.ToString(m_hClient));
}
Int32 count = listClient.Items.Count;
for (Int32 i = 0; i < count; i++)
{
m_hDTU = System.Convert.ToInt32(listClient.Items[i].SubItems[2].Text);
if (DTU_IsClientAvailable(m_hDTU) == 1)
{
Int32 length = new Int32();
length = DTU_GetReceiveDataCount(m_hDTU);
if (length != 0)
{
byte[] data = new byte[length];
DTU_ReceiveData(m_hDTU, ref data[0], length);
string temp = System.Text.Encoding.ASCII.GetString(data);
textBoxRec.Text += temp;
}
}
else
{
DTU_Uninit(m_hDTU);
DTU_Delete(m_hDTU);
listClient.Items.RemoveAt(i);
}
}
}
}
private void BtnClrRec_Click(object sender, EventArgs e)
{
textBoxRec.Text = "";
}
private void BtnClrSend_Click(object sender, EventArgs e)
{
textBoxSent.Text = "";
}
private string StrHexToDec(string s)
{
System.Diagnostics.Debug.Assert(s.CompareTo("") != 0, "数据为空");
string ret = "";
byte tmp = 0;
for (int i = 0; i < s.Length; i++)
{
string temp = System.Convert.ToString(s[i]) + System.Convert.ToString(s[++i]);
tmp = System.Convert.ToByte(temp, 16);
ret += System.Convert.ToChar (tmp);
i++;
}
return ret;
}
private void BtnSent_Click(object sender, EventArgs e)
{
ListViewItem lv = new ListViewItem();
lv = listClient.FocusedItem;
if (lv == null)
{
MessageBox.Show("没有客户端连接");
return;
}
String s = lv.SubItems[2].Text;
if(DTU_IsClientAvailable(System.Convert.ToInt32(s)) == 1)
{
string data = textBoxSent.Text;
if (data.Length == 0)
{
return;
}
byte[] byteData = new byte[data.Length];
if (radioHex.Checked == true)
{
data = StrHexToDec(data);
}
for (int i = 0; i < data.Length; i++)
{
byteData[i] = System.Convert.ToByte(data[i]);
}
DTU_SendData(m_hDTU, ref byteData[0], data.Length);
}
}
private void Form1_Unload(object sender, FormClosingEventArgs e)
{
if (m_hServer != 0)
{
if (m_hDTU != 0)
{
DTU_Uninit(m_hDTU);
DTU_Delete(m_hDTU);
m_hDTU = 0;
}
DTU_Uninit(m_hServer);
DTU_Delete(m_hServer);
m_hServer = 0;
}
listClient.Items.Clear();
timer100.Enabled = false;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -