private static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name);
private Socket server;
private Thread thread;
private bool First = true;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
timer1.Stop();
tssTime.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss dddd");
if (First)
{
First = false;
var ips = Dns.GetHostByName(Dns.GetHostName());
foreach (var item in ips.AddressList)
{
tssIP.DropDownItems.Add(item.ToString());
}
if (tssIP.DropDownItems.Count > 0)
tssIP.Text = tssIP.DropDownItems[0].Text;
tssStart.PerformClick();
}
timer1.Start();
}
private void tssStart_Click(object sender, EventArgs e)
{
if (tssStart.BackColor == Color.Green)
{
tssStart.BackColor = SystemColors.Control;
tssInfo.Text = "停止监听";
}
else
{
tssStart.BackColor = Color.Green;
tssInfo.Text = "开始监听";
SocketStart();
}
}
private void SocketStart()
{
if (server != null)
{
try
{
thread.Abort();
server.Close();
}
catch { }
}
server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint local = new IPEndPoint(IPAddress.Parse(tssIP.Text), ConvertHelper.ToInt(txtPort.Text));
server.Bind(local);
server.Listen(200);
thread = new Thread(() =>
{
while (true)
{
//Thread.Sleep(500);
Invoke((MethodInvoker)delegate
{
tsProgressBar1.Value = tsProgressBar1.Minimum;
});
Socket client = server.Accept();
byte[] buffer = new byte[4096];
int bytes = client.Receive(buffer, buffer.Length, SocketFlags.None);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < bytes; i++)
{
sb.AppendFormat("{0} ", buffer[i].ToString("x2"));
}
string str = string.Format("{0} 接收到 {1} 发送到 {2} 的消息:{3}\r\n字节形式:{4} ",
DateTime.Now.ToString("HH:mm"),
client.RemoteEndPoint,
client.LocalEndPoint,
Encoding.ASCII.GetString(buffer, 0, bytes),
sb.ToString());
log.Debug(str);
var result = Encoding.ASCII.GetBytes(new char[] { 'O', 'K', '\r' });
client.Send(result);
client.Close();
Invoke((MethodInvoker)delegate
{
tsProgressBar1.Value = tsProgressBar1.Maximum;
if (txtResult.Lines.Length > 10000)
txtResult.Clear();
txtResult.Text = string.Format("{0}\r\n\r\n{1}", str, txtResult.Text);
});
}
});
thread.IsBackground = true;
thread.Start();
}
private void tssIP_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
tssIP.Text = e.ClickedItem.Text;
ResetStart();
}
private void ResetStart()
{
tssStart.PerformClick();
if (tssStart.BackColor != Color.Green)
tssStart.PerformClick();
}
private void txtText_Enter(object sender, EventArgs e)
{
txtText.BackColor = Color.White;
txtByte.BackColor = Color.WhiteSmoke;
}
private void txtByte_Enter(object sender, EventArgs e)
{
txtText.BackColor = Color.WhiteSmoke;
txtByte.BackColor = Color.White;
}
private void btnTest_Click(object sender, EventArgs e)
{
try
{
if (txtText.BackColor == Color.White)
{
// 转 十六进制
bool success = true;
StringBuilder sb = new StringBuilder();
foreach (var item in txtText.Text)
{
int c = (int)item;
if (c > 0xff)
success = false;
sb.AppendFormat("{0} ", ((byte)item).ToString("x2"));
}
txtByte.Text = sb.ToString();
string tmp = string.Format("转换:{0} -> {1}", txtText.Text, txtByte.Text);
log.Debug(tmp);
txtResult.Text = string.Format("{0}\r\n\r\n{1}", tmp, txtResult.Text);
if (!success)
{
ShowErr("不能转换汉字!");
log.Debug("转换出错:不能转换汉字!");
}
}
else
{
string[] strs = txtByte.Text.Trim().Split(' ');
byte[] bs = new byte[strs.Length];
for (int i = 0; i < strs.Length; i++)
{
bs[i] = Convert.ToByte(strs[i], 16);
}
txtText.Text = Encoding.ASCII.GetString(bs);
string tmp = string.Format("转换:{0} -> {1}", txtByte.Text, txtText.Text);
log.Debug(tmp);
txtResult.Text = string.Format("{0}\r\n\r\n{1}", tmp, txtResult.Text);
}
}
catch (Exception ex)
{
string tmp = string.Format("转换出错:{0}", ex.Message);
log.Debug(tmp);
txtResult.Text = string.Format("{0}\r\n\r\n{1}", tmp, txtResult.Text);
if (ex.InnerException != null)
log.DebugFormat("转换出错:{0}", ex.InnerException.Message);
ShowErr(ex.Message);
}
}
private void ShowErr(string text)
{
MessageBox.Show(this, text, "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}