110,546
社区成员
发帖
与我相关
我的任务
分享
public class Client
{
private string StrIPAddr = "";
private int Port = 8999;
Socket CSocket = null;
private string StrRecNO = "";
public bool Success = false;
Thread TSendLetter = null;
public Client(string StrIP, int iListenPort, string StrExecResult)
{
StrIPAddr = StrIP;
Port = iListenPort;
StrRecNO = StrExecResult;
}
public void Execute()
{
//TSendLetter = new Thread(new ThreadStart(SendLetterThread));
//TSendLetter.Start();
SendLetterThread();
}
private void SendLetterThread()
{
string StrData = "";
if (CSocket != null)
{
CSocket.Close();
CSocket = null;
}
CSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ipaddr = IPAddress.Parse(StrIPAddr);
try
{
CSocket.Connect(new IPEndPoint(ipaddr, Port));
if (!CSocket.Connected)
{
//10秒超时
long startticks = DateTime.Now.Ticks;
while (DateTime.Now.AddSeconds(-10).Ticks < startticks)
{
if (CSocket.Connected) break;
}
}
if (!CSocket.Connected)
{
CSocket.Close();
CSocket = null;
PubVar.StrLastError += "不能连接到地址" + StrIPAddr + "\r\n";
return;
}
StrData = "<--RecNO-->" + StrRecNO + "<--End-->";
CSocket.Send(Encoding.Default.GetBytes(StrData));
}
catch (Exception Ex)
{
PubVar.StrLastError += "Send " + StrData + " 时发生错误: " + Ex.Message + "\r\n";
}
}
public void Dispose()
{
if (CSocket != null)
{
CSocket.Close();
CSocket = null;
}
if (TSendLetter != null)
{
TSendLetter.Abort();
TSendLetter = null;
}
}
}
Client client = new Client(StrIP, iPort, StrRecNO);
client.Execute();
client.Dispose();
public class TCPServer
{
private string FIPAddr = "";
private int FPort = 8991;
private Socket SServer = null;
private IPEndPoint IPInfor = null;
private ManualResetEvent allDone = new ManualResetEvent(false);
private Thread thread = null;
private string FState = "";
public TCPServer() { }
public string IPAddr
{
get { return FIPAddr; }
set { FIPAddr = value; }
}
public int Port
{
get { return FPort; }
set { FPort = value; }
}
public string State
{
get { return FState; }
set { FState += value; }
}
private void StartListening()
{
IPAddress ipaddr = null;
if (IPAddr == "")
ipaddr = IPAddress.Any;
else
ipaddr = IPAddress.Parse(IPAddr);
IPInfor = new IPEndPoint(ipaddr, Port);
SServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
SServer.Bind(IPInfor);
SServer.Listen(50);
try
{
while (true)
{
allDone.Reset();
SServer.BeginAccept(new AsyncCallback(AcceptCallback), SServer);
allDone.WaitOne();
}
}
catch { }
}
public void Listening()
{
thread = new Thread(new ThreadStart(StartListening));
thread.Name = "TCPServer.Listening";
thread.Start();
}
static void GetNewMessage(string StrRecNO)
{
try
{
string StrSQL;
StrSQL = "SELECT WORKER.NAME WORKERNAME, REGISTER.NAME, REGISTER.IDNO, REGISTER.COMPANY, "
+ "(SELECT NAME FROM REASON WHERE REASON.RECNO = VISITINFOR.REASON) AS REASON, "
+ "VISITINFOR.RECEIVE, REGISTER.PICTURE "
+ "FROM (REGISTER LEFT JOIN VISITINFOR "
+ "ON REGISTER.RECNO = VISITINFOR.RECNO) "
+ "LEFT JOIN WORKER "
+ "ON WORKER.RECNO = VISITINFOR.WORKER "
+ "WHERE REGISTER.RECNO = '" + StrRecNO + "'";
XmlNode XmlResult = Common.ComService.GetInfor("SkyHorse", "SkyHorse", StrSQL);
MemoryStream MSData = new MemoryStream();
XmlTextWriter XW = new XmlTextWriter(MSData, Encoding.UTF8);
XmlResult.WriteTo(XW);
XW.Flush();
MSData.Position = 0;
DataSet DS = new DataSet();
DS.ReadXml(MSData);
XW.Close();
if (DS.Tables.Count > 0 && DS.Tables[0].TableName != "ReturnResult")
{
VisitTips visittips = new VisitTips(DS);
visittips.ShowDialog();
visittips.Dispose();
visittips = null;
}
DS.Dispose();
MSData.Close();
}
catch
{
// MessageBox.Show("GetMessage","提示");
}
StrRecNO = "";
}
private void AcceptCallback(IAsyncResult ar)
{
Socket listener = null;
Socket handler = null;
try
{
allDone.Set();
listener = (Socket)ar.AsyncState;
handler = listener.EndAccept(ar);
//State = "==>>地址 " + ((IPEndPoint)handler.RemoteEndPoint).Address.ToString() + " 连接\r\n";
StateObject state = new StateObject();
state.workSocket = handler;
byte[] getprtbuff = new byte[1024];
int recvlen = 0, availen = 0;
int TimeOut = 0;
while (true)
{
if (TimeOut < 10)
{
PubFunc.Sleep(500);
TimeOut++;
}
else break;
availen = handler.Available;
if (availen > 0)
{
recvlen = handler.Receive(getprtbuff);
if (recvlen > 0)
{
//Do something
string StrFileName = Encoding.Default.GetString(getprtbuff, 0, availen);
string StrSign = "<--RecNO-->";
string StrRecNO = "";
int iPos;
iPos = StrFileName.IndexOf(StrSign);
if (iPos == 0)
{
StrSign = "<--End-->";
iPos = StrFileName.IndexOf(StrSign);
if (iPos < 0)
{
StrRecNO = "";
return;
}
StrRecNO = PubFunc.Copy(StrFileName, 11, iPos - 11);
GetNewMessage(StrRecNO);
break;
}
}
}
}
}
catch { }
if (handler != null)
{
handler.Close();
handler = null;
}
}
public void Abort()
{
if (thread != null)
{
SServer.Close();
SServer = null;
thread.Abort();
thread = null;
}
}
}
public class StateObject
{
/**/
/// <summary>
/// 构造
/// </summary>
/// <param name="bufferSize">缓存</param>
/// <param name="WorkSocket">工作的插座</param>
public StateObject()
{
}
/**/
/// <summary>
/// 缓存
/// </summary>
public byte[] buffer = null; /**/
/// <summary>
/// 工作插座
/// </summary>
public Socket workSocket = null;
/**/
/// <summary>
/// 数据流
/// </summary>
public Stream Datastream = new MemoryStream();
/**/
/// <summary>
/// 剩余大小
/// </summary>
public long residualSize = 0;
/**/
/// <summary>
/// 数据包大小
/// </summary>
public long packSize = 0;
/**/
/// <summary>
/// 计数器
/// </summary>
public int Cortrol = 0;
}
tcpserver = new TCPServer();
IPHostEntry hostInfo = Dns.GetHostEntry(Dns.GetHostName());
LocalAddr = hostInfo.AddressList[0].ToString();
tcpserver.IPAddr = LocalAddr;
tcpserver.Port = int.Parse(LocalPort);
tcpserver.Listening();