代码:
public void State()
{
try
{
mythread = new Thread(new ThreadStart(BeginListen));
mythread.Start();
}
catch (Exception ex)
{
eventLog_SendWorks.WriteEntry("监听端口线程启动错误提示:" + ex.Message, EventLogEntryType.Error);
}
}
public void Close()
{
try
{
//System.Environment.Exit(System.Environment.ExitCode); socket.Shutdown(SocketShutdown.Both);
socket.Close();
mythread.Abort();
}
catch (ObjectDisposedException ex)
{
eventLog_SendWorks.WriteEntry("ObjectDisposedException错误!:"+ex.Message,EventLogEntryType.Error);
}
catch (Exception ex)
{
eventLog_SendWorks.WriteEntry("关闭Socket和Thread是出错:" + ex.Message, EventLogEntryType.Error);
}
}
public static IPAddress GetServerIP()
{
IPHostEntry ieh = Dns.GetHostEntry(Dns.GetHostName()); //获取本地主机的地址
return ieh.AddressList[0];
}
private void BeginListen()
{
IPAddress ServerIp = GetServerIP();
IPEndPoint iep = new IPEndPoint(ServerIp, 8000);
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
byte[] byteMessage = new byte[1024]; socket.Bind(iep); while (true)
{
try
{
socket.Listen(5);
Socket newSocket = socket.Accept();
newSocket.Receive(byteMessage); newSocket.Shutdown(SocketShutdown.Both);
newSocket.Close(); string msg = Encoding.Default.GetString(byteMessage);
msg = msg.Substring(0, 13);
if (msg == "ProWorkUpdate")
{
try
{
eventLog_SendWorks.WriteEntry("数据库更新,更新数据!");
this.timer_SendMessage.Enabled = false; if (SendTable != null)
{
SendTable.Clear();
}
dtTable = GetData(); //从数据库中读取在某一段是时间间内可能要发的事务信息
OperationDataTable(); //向发送事务表(SendTable)中添加数据 this.timer_SendMessage.Enabled = true;
}
catch (Exception ex)
{
eventLog_SendWorks.WriteEntry("触发数据更新时出错:" + ex.Message);
}
//lbl_BeginInvoke.BeginInvoke(new InvokeDelegateReadData(ReadData));
}
//Thread.Sleep(1000);
}
catch (SocketException ex)
{
//MessageBox.Show(ex.Message, "Socket错误提示!");
eventLog_SendWorks.WriteEntry("Socket连接错误提示:" + ex.Message,EventLogEntryType.Error);
}
}
}
public void State()
{
try
{
mythread = new Thread(new ThreadStart(BeginListen));
mythread.Start();
}
catch (Exception ex)
{
eventLog_SendWorks.WriteEntry("监听端口线程启动错误提示:" + ex.Message, EventLogEntryType.Error);
}
}
public void Close()
{
try
{
//System.Environment.Exit(System.Environment.ExitCode); socket.Shutdown(SocketShutdown.Both);
socket.Close();
mythread.Abort();
}
catch (ObjectDisposedException ex)
{
eventLog_SendWorks.WriteEntry("ObjectDisposedException错误!:"+ex.Message,EventLogEntryType.Error);
}
catch (Exception ex)
{
eventLog_SendWorks.WriteEntry("关闭Socket和Thread是出错:" + ex.Message, EventLogEntryType.Error);
}
}
public static IPAddress GetServerIP()
{
IPHostEntry ieh = Dns.GetHostEntry(Dns.GetHostName()); //获取本地主机的地址
return ieh.AddressList[0];
}
private void BeginListen()
{
IPAddress ServerIp = GetServerIP();
IPEndPoint iep = new IPEndPoint(ServerIp, 8000);
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
byte[] byteMessage = new byte[1024]; socket.Bind(iep); while (true)
{
try
{
socket.Listen(5);
Socket newSocket = socket.Accept();
newSocket.Receive(byteMessage); newSocket.Shutdown(SocketShutdown.Both);
newSocket.Close(); string msg = Encoding.Default.GetString(byteMessage);
msg = msg.Substring(0, 13);
if (msg == "ProWorkUpdate")
{
try
{
eventLog_SendWorks.WriteEntry("数据库更新,更新数据!");
this.timer_SendMessage.Enabled = false; if (SendTable != null)
{
SendTable.Clear();
}
dtTable = GetData(); //从数据库中读取在某一段是时间间内可能要发的事务信息
OperationDataTable(); //向发送事务表(SendTable)中添加数据 this.timer_SendMessage.Enabled = true;
}
catch (Exception ex)
{
eventLog_SendWorks.WriteEntry("触发数据更新时出错:" + ex.Message);
}
//lbl_BeginInvoke.BeginInvoke(new InvokeDelegateReadData(ReadData));
}
//Thread.Sleep(1000);
}
catch (SocketException ex)
{
//MessageBox.Show(ex.Message, "Socket错误提示!");
eventLog_SendWorks.WriteEntry("Socket连接错误提示:" + ex.Message,EventLogEntryType.Error);
}
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货