using System;
using System.Collections;
using System.Collections.Specialized;
using System.Data;
using System.Drawing;
using System.IO;
using System.Net;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Diagnostics;
namespace SRT2203
{
public class SocketAccess
{
public static FrmMain MainForm { get; set; }//主窗体
private IPEndPoint ServerInfo;//存放服务器的IP和端口信息
public Socket ClientSocket; //客户端SOCKET
private Byte[] MsgBuffer=new byte[100]; //存放消息数据缓冲
private int machineId;
public SocketAccess(string ip, string port, string _machineId)
{
try
{
machineId = int.Parse(_machineId);
ClientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
ServerInfo = new IPEndPoint(IPAddress.Parse(ip), Convert.ToInt32(port));
ClientSocket.Connect(ServerInfo);
ClientSocket.BeginReceive(MsgBuffer, 0, MsgBuffer.Length, 0, new AsyncCallback(ReceiveCallBack), null);
SocketAccess.MainForm.setTxt(machineId + "号机 连接成功!");
}
catch (Exception ex)
{
Log.WriteFile(string.Format("SocketConn {0}", ex.ToString()));
}
}
//接收数据
public void ReceiveCallBack(IAsyncResult AR)
{
try
{
int REnd = ClientSocket.EndReceive(AR);
if (REnd == 0)
{
ClientSocket.Close();
return;
}
string msg = "";
for (int i = 0; i < REnd; i++)
{
msg += MsgBuffer[i].ToString("X2") + " "; //16进制显示
}
SocketAccess.MainForm.setTxt(machineId + "号机: " + msg); //窗体显示
ClientSocket.BeginReceive(MsgBuffer, 0, MsgBuffer.Length, 0, new AsyncCallback(ReceiveCallBack), null);
}
catch (Exception ex)
{
}
}
}
}