123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- using DllFileSoc;
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Net;
- using System.Net.Sockets;
- using System.Text;
- using System.Threading;
- using System.Windows.Forms;
- namespace FileToMD5
- {
- public partial class ConSocket : Form
- {
- Socket filesocket = null;
- public ConSocket()
- {
- InitializeComponent();
- }
- private void button1_Click(object sender, EventArgs e)
- {
- string errorinfo = string.Empty;
- filesocket = ConnServer(ref errorinfo);
- lblend.Text = errorinfo;
- TimerSatrt();
- }
- public void TimerSatrt()
- {
- System.Timers.Timer timer = new System.Timers.Timer();
- timer.Enabled = true;
- //timer.Interval = 1000*60*60;//执行间隔时间 1小时一次
- timer.Interval = 1000 * 30;
- timer.Start();
- timer.Elapsed += new System.Timers.ElapsedEventHandler(CheckRealIP);
- }
- public void CheckRealIP(object sender, System.Timers.ElapsedEventArgs e)
- {
- string errorinfo = string.Empty;
- try
- {
- byte[] datas = GetFileDatas(5888, 1, "");
- filesocket.Send(datas);
- int alllen = 0;
- datas = ReadData(filesocket, ref alllen, ref errorinfo);//接收反馈包
- if (datas == null)
- {
- LogBLL.Err(errorinfo);
- }
- else
- {
- byte[] statusdatas = new byte[4];
- Array.Copy(datas, 8, statusdatas, 0, 4);
- int status = BitConverter.ToInt32(statusdatas, 0);
- byte[] getinfo = new byte[datas.Length - 12];
- Array.Copy(datas, 12, getinfo, 0, getinfo.Length);
- string info = Encoding.UTF8.GetString(getinfo);
- LogBLL.Err(info);
- //if (status == 1)//根据MAC更新RealIP成功,关闭通信
- //{
- // if (filesocket!=null)
- // filesocket.Close();
- //}
- if (filesocket != null)
- filesocket.Close();
- //else//更新失败,使用之前的方法(根据机台ID更新RealIP)
- //{
- // if (!CheckIP(int.Parse(PubInfo.MacID), ref errorinfo))
- // {
- // LOG.log(errorinfo);
- // }
- // if (filesocket != null)
- // filesocket.Close();
- //}
- }
- lblend.Text = errorinfo;
- }
- catch (Exception ex)
- {
- LogBLL.Err(ex.Message);
- lblend.Text = errorinfo;
- }
- }
- private Socket ConnServer( ref string errorinfo)
- {
- try
- {
- IPAddress ip = IPAddress.Parse(txtip.Text);//服务端所在IP
- //IPEndPoint ipEnd = new IPEndPoint(ip, 5888);//服务端所监听的接口
- IPEndPoint ipEnd = new IPEndPoint(ip,Convert.ToInt32(txtport.Text));//服务端所监听的接口
- Socket CurrSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//初始化一个Socket对象
- CurrSocket.Connect(ipEnd);
- //此语句只支持windows系统,不支持linux系统
- //CurrSocket.IOControl(IOControlCode.KeepAliveValues, GetKeepAliveData(), null);
- ////处理来自机台的包,设置接受超时时间
- CurrSocket.ReceiveTimeout = 1000*5;
- CurrSocket.SendTimeout = 1000 * 5;
- errorinfo = "连接成功!!!";
- return CurrSocket;
- }
- catch (Exception ex)
- {
- errorinfo = ex.Message.ToString();
- return null;
- }
- }
- private void btnclose_Click(object sender, EventArgs e)
- {
- if (filesocket != null)
- {
- filesocket.Close();
- lblend.Text = "关闭成功~";
- }
- }
- private byte[] GetFileDatas(Int32 mode, Int32 result, string msg)
- {
- byte[] msgbytes = Encoding.UTF8.GetBytes(msg);
- Int32 len = msgbytes.Length + 12;
- byte[] alldatas = BitConverter.GetBytes(len);
- byte[] forAll = (alldatas.Concat(BitConverter.GetBytes(mode)).Concat(BitConverter.GetBytes(result)).Concat(msgbytes)).ToArray();
- return forAll;
- }
- private byte[] ReadData(Socket CurrSocket, ref int alllen, ref string errorinfo)
- {
- byte[] allbuffs = null;
- try
- {
- byte[] tempbuff = new byte[4];
- byte[] bytesbuff = new byte[4];
- int result = 0;
- int levlen = 4;
- int zerocount = 0;
- while (levlen > 0)
- {
- //说明前面4位还没接受完,需要继续接受
- result = CurrSocket.Receive(tempbuff, levlen, SocketFlags.None);//先读取4位块长度字节
- if (result == 0 && zerocount <= 20)
- {
- zerocount++;
- //如果返回数据长度为0,则休眠1秒钟,然后继续读取
- Thread.Sleep(1000);
- continue;
- }
- if (result <= 0)
- {
- errorinfo = $"未能从待机程序监听上读取数据,可能机台已经断开了,接受长度={result} ";
- return null;
- }
- if (result < levlen)
- {
- //添加测试代码
- //int a = 10;
- }
- if (result > 0)
- {
- Array.Copy(tempbuff, 0, bytesbuff, 4 - levlen, result);
- }
- levlen = levlen - result;
- }
- //Array.Reverse(bytesbuff);//20200920
- int len = BitConverter.ToInt32(bytesbuff, 0) - 4;
- alllen = len;
- if (len > 10)
- {
- int a = 10;
- }
- byte[] buffs = new byte[len];
- tempbuff = new byte[len];
- levlen = len;
- zerocount = 0;
- while (levlen > 0)
- {
- //说明还没接受完,需要继续接受
- result = CurrSocket.Receive(tempbuff, levlen, SocketFlags.None);
- if (result == 0 && zerocount <= 20)
- {
- zerocount++;
- //如果返回数据长度为0,则休眠1秒钟,然后继续读取
- Thread.Sleep(1000);
- continue;
- }
- if (result <= 0)
- {
- errorinfo = $"未能从待机程序监听上读取数据,可能机台已经断开了,接受长度={result} ";
- return null;
- }
- if (result > 0)
- {
- Array.Copy(tempbuff, 0, buffs, len - levlen, result);
- }
- levlen = levlen - result;
- }
- //result =mysocket.Receive(buffs,len,SocketFlags.None);
- //Array.Reverse(bytesbuff);//20200920
- allbuffs = new byte[len + 4];
- Array.Copy(bytesbuff, allbuffs, 4);
- Array.Copy(buffs, 0, allbuffs, 4, len);
- alllen = len + 4;
- return allbuffs;
- }
- catch (SocketException ex)
- {
- errorinfo = "待机程序Socket接受数据发生异常,错误信息为:" + ex.SocketErrorCode.ToString();
- return null;
- }
- catch (Exception ex)
- {
- errorinfo = ex.Message.ToString();
- errorinfo = "待机程序Socket接受数据发生异常,错误信息为:" + errorinfo;
- return null;
- }
- }
- }
- }
|