using System;
|
using System.Collections.Generic;
|
using System.ComponentModel;
|
using System.Data;
|
using System.Drawing;
|
using System.Linq;
|
using System.Net.Sockets;
|
using System.Net;
|
using System.Text;
|
using System.Threading.Tasks;
|
using System.Windows.Forms;
|
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
|
using System.Threading;
|
using DataCapture_MA.log4Net;
|
using DataCapture_MA.Entity;
|
using DataCapture_MA.DataHnadle;
|
using DataCapture_MA.AutoMapperConfig;
|
|
namespace DataCapture_MA
|
{
|
public partial class CaptrueForm : Form
|
{
|
bool RunningFlag = false;
|
Socket skt = WZ.Useful.Commons.NetworkUtil.CreateUdpSocket();
|
EndPoint RemotePoint = null;
|
public delegate void MyInvoke(string strRecv);
|
public CaptrueForm()
|
{
|
InitializeComponent();
|
var hostName = Dns.GetHostName();
|
var ips = Dns.GetHostAddresses(hostName);
|
foreach (var ip in ips)
|
{
|
if (ip.AddressFamily == AddressFamily.InterNetwork) // 只显示IPv4地址
|
{
|
ipSelect.Items.Add(ip);
|
}
|
}
|
ipSelect.SelectedIndex = 0;
|
to_ipTxt.Text = ipSelect.SelectedItem.ToString();
|
AutoMapper.Mapper.Initialize((cfg) => {
|
cfg.AddProfile<MapperConfiguration>();
|
});
|
}
|
|
private void ReceiveHandle()
|
{
|
//接收数据处理线程
|
string msg;
|
byte[] data = new byte[204800];
|
MyInvoke myI = new MyInvoke(UpdateRcvTextBox);
|
while (RunningFlag)
|
{
|
|
if (skt == null || !RunningFlag || skt.Available < 1)
|
{
|
Thread.Sleep(200);
|
continue;
|
}
|
//跨线程调用控件
|
//接收UDP数据报,引用参数RemotePoint获得源地址
|
int rlen = skt.ReceiveFrom(data, ref RemotePoint);
|
msg = Encoding.Default.GetString(data, 0, rlen);
|
r_showBox.BeginInvoke(myI, new object[] { "From " + RemotePoint.ToString() + " << " + msg });
|
|
}
|
}
|
|
//处理接收到的UDP
|
private void UpdateRcvTextBox(string msg)
|
{
|
//接收数据显示
|
this.r_showBox.Text += (msg) + "\n\n";
|
Log4NetHelper.WriteInfoLog(LogType.Receive, msg);
|
ReceiveDataHandle.AnalysisMeassage(msg);
|
}
|
|
private void start_connect_Click(object sender, EventArgs e)
|
{
|
try
|
{
|
if (skt != null)
|
{
|
skt.Close();
|
skt.Dispose();
|
}
|
|
// 创建新的 UDP 套接字
|
skt = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
|
|
// 设置允许重用地址和端口
|
skt.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
|
|
//得到本机IP,设置UDP端口号
|
IPAddress ip = IPAddress.Parse(ipSelect.SelectedItem.ToString());//本机IP
|
int port = int.Parse(local_port.Text.Trim());//端口号
|
IPEndPoint iPEndPoint = new IPEndPoint(ip, port);
|
skt.Bind(iPEndPoint);
|
|
//得到客户机IP
|
IPAddress ip2 = IPAddress.Parse(to_ipTxt.Text.Trim());//客户机IP
|
int port2 = int.Parse(to_portTxt.Text.Trim());//端口号
|
IPEndPoint iPEndPoint2 = new IPEndPoint(ip2, port2);
|
RemotePoint = (EndPoint)(iPEndPoint2);
|
|
RunningFlag = true;
|
|
Thread thread = new Thread(new ThreadStart(ReceiveHandle));
|
thread.Start();
|
|
|
|
Log4NetHelper.WriteInfoLog(LogType.Receive, "开启UDP通信成功" + iPEndPoint.ToString());
|
ipSelect.Enabled = false;
|
local_port.Enabled = false;
|
to_ipTxt.Enabled = false;
|
to_portTxt.Enabled = false;
|
start_connect.BackColor = Color.DarkRed;
|
start_connect.Enabled = false;
|
colse_connect.BackColor = Color.DarkGreen;
|
colse_connect.Enabled = true;
|
r_showBox.Text += "数据接收已启动\n";
|
}
|
catch(Exception ex)
|
{
|
Log4NetHelper.WriteInfoLog(LogType.Receive, "开启UDP通信失败" + ex);
|
MessageBox.Show(ex.Message);
|
}
|
}
|
|
private void CreateDatabase()
|
{
|
try
|
{
|
using (var context = new DbModel())
|
{
|
// 确保数据库和表存在,如果不存在则创建
|
context.Database.EnsureCreated();
|
|
// 添加一些数据
|
context.RobotInfo.Add(new RobotInfo
|
{
|
WarnningNum = 0,
|
//RobotStatus = "Normal",
|
RobotModel = "Model X",
|
RobotSerialNo = "123456",
|
WarnningContent = "清除富文本框数据",
|
CreateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
|
CreateStamp = DateTimeOffset.Now.ToUnixTimeSeconds(),
|
IsDelete = false
|
});
|
|
// 保存更改
|
context.SaveChanges();
|
|
var xx = context.RobotInfo.ToList();
|
}
|
}
|
catch (Exception ex)
|
{
|
r_showBox.Text = "数据库初始化异常"+ ex.Message;
|
}
|
}
|
|
private void colse_connect_Click(object sender, EventArgs e)
|
{
|
try
|
{
|
RunningFlag = false; // 停止接收线程
|
|
if (skt != null)
|
{
|
skt.Close(); // 关闭套接字
|
}
|
|
ipSelect.Enabled = true;
|
local_port.Enabled = true;
|
to_ipTxt.Enabled = true;
|
to_portTxt.Enabled = true;
|
colse_connect.Enabled = false;
|
start_connect.Enabled = true;
|
colse_connect.BackColor = Color.DarkRed;
|
start_connect.BackColor = Color.DarkGreen;
|
r_showBox.Text += "已关闭数据接收\n";
|
}
|
catch (Exception ex)
|
{
|
MessageBox.Show(ex.Message);
|
}
|
}
|
|
private void sendbtn_Click(object sender, EventArgs e)
|
{
|
try
|
{
|
string sendStr = richSendTxt.Text;
|
IPAddress ip2 = IPAddress.Parse(to_ipTxt.Text.Trim());//客户机IP
|
int port2 = int.Parse(to_portTxt.Text.Trim());//端口号
|
IPEndPoint iPEndPoint2 = new IPEndPoint(ip2, port2);
|
RemotePoint = (EndPoint)(iPEndPoint2);
|
skt.Connect(RemotePoint);
|
skt.Send(WZ.Useful.Commons.ConvertHelper.StringToBytes(sendStr));
|
|
r_showBox.Text += "To " + RemotePoint.ToString() +">> " + (sendStr) + "\n";
|
}
|
catch( Exception ex)
|
{
|
MessageBox.Show(ex.Message);
|
}
|
}
|
|
private void clearBtn_Click(object sender, EventArgs e)
|
{
|
CreateDatabase();
|
richSendTxt.Text = string.Empty;
|
r_showBox.Text = string.Empty;
|
}
|
|
private void ipSelect_SelectedIndexChanged(object sender, EventArgs e)
|
{
|
|
}
|
}
|
}
|