110,577
社区成员
发帖
与我相关
我的任务
分享
namespace WindowsApplication1
{
public partial class Form1 : Form
{
Socket serverSocket;
Socket clientSocket;
byte[] data = new byte[1300];
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Listen();
}
private void Listen()
{
int port;
this.button1.Enabled = false;
try
{
port = Convert.ToInt32(textBox1.Text.Trim());
}
catch
{
MessageBox.Show("您输入的端口号码格式不正确,请重新输入!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
textBox1.Text = "";
return;
}
//IPAddress addr = Dns.GetHostAddresses(Dns.GetHostName())[0];
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, port);
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
serverSocket.Bind(ipEndPoint);
serverSocket.Listen(10);
serverSocket.BeginAccept(new AsyncCallback(AcceptCallBack), serverSocket);
}
private void AcceptCallBack(IAsyncResult ar)
{
try
{
listBox1.Items.Add("检测到一次设备访问接入");
Socket oldSocket = (Socket)ar.AsyncState;
clientSocket = oldSocket.EndAccept(ar);
listBox1.Items.Add("与访问的设备建立连接成功");
this.button1.Enabled = false;
clientSocket.BeginReceive(data, 0, data.Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), clientSocket);
}
catch
{
//clientSocket.BeginReceive(data, 0, data.Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), clientSocket);
listBox1.Items.Add("检测到一次设备访问接入,但是接入失败");
}
}
private void SendMessage(IAsyncResult ar)
{
try
{
Socket client = (Socket)ar.AsyncState;
int send = clientSocket.EndSend(ar);
clientSocket.BeginReceive(data, 0, data.Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), clientSocket);
}
catch
{
clientSocket.BeginAccept(new AsyncCallback(AcceptCallBack), serverSocket);
}
}
private void ReceiveMessage(IAsyncResult ar)
{
try
{
Socket client = (Socket)ar.AsyncState;
IPEndPoint ClientIp = client.RemoteEndPoint as IPEndPoint;
listBox1.Items.Add(ClientIp.Address);
int receiveDataLength = client.EndReceive(ar);
string str = System.Text.Encoding.ASCII.GetString(data);
if (!string.IsNullOrEmpty(str))
{
ConvertToData(data);
//serverSocket.BeginAccept(new AsyncCallback(AcceptCallBack), serverSocket);
clientSocket.BeginReceive(data, 0, data.Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), clientSocket);
}
}
catch
{
clientSocket.BeginAccept(new AsyncCallback(AcceptCallBack), serverSocket);
}
}
private void ConvertToData(byte[] data)
{
int len = data.Length;
string str = "";
string s = "";
for(int i = 0;i<len;i++)
{
s = data[i].ToString("X").PadLeft(2, '0');
str = str + s;
}
listBox1.Items.Add(str);
Counting2(data,str);
//Listen();
}
private void Form1_Load(object sender, EventArgs e)
{
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
this.timer1.Enabled = true;
}
private void button2_Click(object sender, EventArgs e)
{
}
private void timer1_Tick(object sender, EventArgs e)
{
//this.dataGridView1.Rows.Clear();
//foreach (KeyValuePair<string, int> kvp in cardcount)
//{
// this.dataGridView1.Rows.Add(1);
// this.dataGridView1.Rows[this.dataGridView1.Rows.Count-1].Cells[0].Value=this.dataGridView1.Rows.Count.ToString().Trim();
// this.dataGridView1.Rows[this.dataGridView1.Rows.Count - 1].Cells[1].Value = kvp.Key.Trim();
// this.dataGridView1.Rows[this.dataGridView1.Rows.Count - 1].Cells[2].Value = kvp.Value.ToString().Trim();
//}
this.dataGridView1.Rows.Clear();
foreach (KeyValuePair<string,int> var in cardcount)
{
dataGridView1.Rows.Add(1);
dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells[0].Value = dataGridView1.Rows.Count.ToString();
dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells[1].Value = var.Key;
dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells[2].Value = var.Value;
}
}
Dictionary<int, string> cardlist = new Dictionary<int, string>();
Dictionary<string, int> cardcount = new Dictionary<string, int>();
private void Counting2(byte[] data, string str)
{
if (str.IndexOf("430000000000") > 0)
{
int start = str.IndexOf("430000000000");
while (true)
{
string str1 = str.Substring(start, 16);
if (str1.StartsWith("43"))
{
if (cardcount.ContainsKey(str1))
{
cardcount[str1] = cardcount[str1] + 1;
}
else
{
cardcount.Add(str1, 1);
}
}
start++;
if (start > 1284)
{
break;
}
}
}
}
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
}
}
}
Socket m_Soket;
//这就是那个列表用来保存接收到的client连接
ArrayList a_acceptedSockt;
public void Server_Listen()
{
//如何建立server连接就不写了,总之使用前把m_Socket初始化好就行了。
Socket clientSockt = m_Soket.Accept();
//这个Add函数自己写,注意线程互斥。
a_acceptedSockt.Add();
///这个函数就是用来将接收到的连接进行包装,用来收发数据
AfterConnect(clientSockt);
}
publice AfterConnect(Sockt clientSockt)
{
//这里就是一个对clinet 连接进行包装的线程类,有start方法需要你自己实现,目的还是接收数据。
//一般来讲你只要持有了那个列表那你就可以得到所有已连接的clientSocket,然后就想干什么干什么
//自由发挥了。
Thread_clientThre clientThre = new Thread_clientThre(clientSockt);
clientThre.start();
}
namespace WindowsApplication1
{
public partial class Form1 : Form
{
Socket serverSocket;
Socket clientSocket;
byte[] data = new byte[1300];
public Form1()
{
InitializeComponent();
}
public static ManualResetEvent allDone = new ManualResetEvent(false);
private void button1_Click(object sender, EventArgs e)
{
int port;
this.button1.Enabled = false;
try
{
port = Convert.ToInt32(textBox1.Text.Trim());
}
catch
{
MessageBox.Show("您输入的端口号码格式不正确,请重新输入!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
textBox1.Text = "";
return;
}
//IPAddress addr = Dns.GetHostAddresses(Dns.GetHostName())[0];
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, port);
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
serverSocket.Bind(ipEndPoint);
serverSocket.Listen(10);
Thread tt = new Thread(DoThread);
tt.Start();
}
private void DoThread()
{
while (true)
{
allDone.Reset();
serverSocket.BeginAccept(new AsyncCallback(AcceptCallBack), serverSocket);
allDone.WaitOne();
}
}
private void AcceptCallBack(IAsyncResult ar)
{
allDone.Set();
// listBox1.Items.Add("检测到一次设备访问接入");
try
{
listBox1.Items.Add("检测到一次设备访问接入");
Socket oldSocket = (Socket)ar.AsyncState;
clientSocket = oldSocket.EndAccept(ar);
listBox1.Items.Add("与访问的设备建立连接成功");
this.button1.Enabled = false;
clientSocket.BeginReceive(data, 0, data.Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), clientSocket);
}
catch
{
//clientSocket.BeginReceive(data, 0, data.Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), clientSocket);
listBox1.Items.Add("检测到一次设备访问接入,但是接入失败");
}
}
private void SendMessage(IAsyncResult ar)
{
try
{
Socket client = (Socket)ar.AsyncState;
int send = clientSocket.EndSend(ar);
clientSocket.BeginReceive(data, 0, data.Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), clientSocket);
}
catch
{
clientSocket.BeginAccept(new AsyncCallback(AcceptCallBack), serverSocket);
}
}
private void ReceiveMessage(IAsyncResult ar)
{
try
{
Socket client = (Socket)ar.AsyncState;
int receiveDataLength = client.EndReceive(ar);
IPEndPoint ip = client.RemoteEndPoint as IPEndPoint;
listBox1.Items.Add(ip.Address);
string str = System.Text.Encoding.ASCII.GetString(data);
if (!string.IsNullOrEmpty(str))
{
ConvertToData(data);
clientSocket.BeginReceive(data, 0, data.Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), clientSocket);
}
}
catch
{
clientSocket.BeginAccept(new AsyncCallback(AcceptCallBack), serverSocket);
}
}
private void ConvertToData(byte[] data)//处理数据,无关系
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, port);
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
serverSocket.Bind(ipEndPoint);
serverSocket.Listen(10);