![]() |
#2
ZY1378673122014-04-17 10:48
|

using System;
using System.Collections.Generic;
using using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using using using System.Threading;
using namespace _104规约解析软件通讯
{
public partial class ClientForm : Form
{
public ClientForm()
{
InitializeComponent();
handleSave = new HandleSaveText(AddDataText);
}
private string data = null;
private delegate void HandleSaveText(string text); //定义委托,用于多线程保存文件
private HandleSaveText handleSave;
private bool isExit = false;
private TcpClient tcpclient;
private NetworkStream netStream;
//通知一个或多个正在等待的线程已发生事件
private ManualResetEvent allDone = new ManualResetEvent(false);
private void Connect()
{
tcpclient = new TcpClient(AddressFamily.InterNetwork);
//引用在相应异步操作完成时调用的方法
AsyncCallback RequestCallBack = new AsyncCallback(requestCallBack);
allDone.Reset();//将事件线程设置为非终止状态
tcpclient.BeginConnect(IPAddress.Parse(ServerIP.Text.Trim()), int.Parse(Port.Text.Trim()), requestCallBack, tcpclient);
allDone.WaitOne();//阻止当前线程,直到alldone.set()之后继续运行
}
/// <summary>
/// 接收数据基础类
/// </summary>
public class dataread
{
public NetworkStream netstream;
public byte[] msg;
public dataread(NetworkStream ns, int buffersize)
{
this.netstream = ns;
this.msg = new byte[buffersize];
}
}
private void requestCallBack(IAsyncResult ar)
{
allDone.Set();
tcpclient = (TcpClient)ar.AsyncState;
if (tcpclient.Connected)
{
txtState.Text = "连接服务器成功!";
int NS = 0, NR = 0;
netStream = tcpclient.GetStream();//如果远程客户端断开一样可以获得netStream
byte[] msg1 = new byte[6] { 0x68, 0x04, 0x07, 0x00, 0x00, 0x00 };
netStream.Write(msg1, 0, msg1.Length);
string str = byteToHexStr(msg1);
NS++;
rtb.AppendText("主站发送的报文为:" + str + "\r\n");
//client.receivebuffersize接收缓冲区的大小
dataread dr = new dataread(netStream, tcpclient.ReceiveBufferSize);
//开始接受数据
netStream.BeginRead(dr.msg, 0, dr.msg.Length, new AsyncCallback(ReadCallBack), dr);
}
else
{
txtState.Text = "连接服务器失败,请检查服务器地址或端口!";
}
}
public string byteToHexStr(byte[] bytes)//转化成16进制数
{
string returnStr = " ";
Color Color = rtb.SelectionColor;
SetTextColor(Color.Blue);
if (bytes != null)
{
for (int i = 0; i < bytes.Length; i++)
{
returnStr += bytes[i].ToString("X2");
if (((i + 1) % 6) == 0)
returnStr += " ";
}
}
return returnStr;
}
private void SetTextColor(Color color)
{
rtb.Select(rtb.Text.Length, 0);
rtb.SelectionColor = color;
}
private void ReadCallBack(IAsyncResult ar)
{
try
{
dataread dr = (dataread)ar.AsyncState;
int rec = (ar);
string Msg = Encoding.UTF8.GetString(dr.msg, 0, rec);
if (Msg != string.Empty)
{
string str1 = byteToHexStr(dr.msg);
rtb.AppendText("主站收到的报文为:" + str1 + "\r\n");
}
if (isExit == false)
{
dr = new dataread(netStream, tcpclient.ReceiveBufferSize);
netStream.BeginRead(dr.msg, 0, dr.msg.Length, ReadCallBack, dr);
}
}
catch (Exception ex)
{
txtState.Text = ex.Message;
}
}
private void connect_Click(object sender, EventArgs e)
{
try
{
Connect();
connect.Enabled = false;
Stopconnect.Enabled = true;
ServerIP.Enabled = false;
Port.Enabled = false;
}
catch (Exception ex)
{
txtState.Text = ex.Message;
}
}
private void Stopconnect_Click(object sender, EventArgs e)
{
Stopconnect.Enabled = false;
connect.Enabled = true;
ServerIP.Enabled = true;
Port.Enabled = true;
tcpclient.Close();
txtState.Text = "已与服务器断开!";
}
}
}
using System.Collections.Generic;
using using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using using using System.Threading;
using namespace _104规约解析软件通讯
{
public partial class ClientForm : Form
{
public ClientForm()
{
InitializeComponent();
handleSave = new HandleSaveText(AddDataText);
}
private string data = null;
private delegate void HandleSaveText(string text); //定义委托,用于多线程保存文件
private HandleSaveText handleSave;
private bool isExit = false;
private TcpClient tcpclient;
private NetworkStream netStream;
//通知一个或多个正在等待的线程已发生事件
private ManualResetEvent allDone = new ManualResetEvent(false);
private void Connect()
{
tcpclient = new TcpClient(AddressFamily.InterNetwork);
//引用在相应异步操作完成时调用的方法
AsyncCallback RequestCallBack = new AsyncCallback(requestCallBack);
allDone.Reset();//将事件线程设置为非终止状态
tcpclient.BeginConnect(IPAddress.Parse(ServerIP.Text.Trim()), int.Parse(Port.Text.Trim()), requestCallBack, tcpclient);
allDone.WaitOne();//阻止当前线程,直到alldone.set()之后继续运行
}
/// <summary>
/// 接收数据基础类
/// </summary>
public class dataread
{
public NetworkStream netstream;
public byte[] msg;
public dataread(NetworkStream ns, int buffersize)
{
this.netstream = ns;
this.msg = new byte[buffersize];
}
}
private void requestCallBack(IAsyncResult ar)
{
allDone.Set();
tcpclient = (TcpClient)ar.AsyncState;
if (tcpclient.Connected)
{
txtState.Text = "连接服务器成功!";
int NS = 0, NR = 0;
netStream = tcpclient.GetStream();//如果远程客户端断开一样可以获得netStream
byte[] msg1 = new byte[6] { 0x68, 0x04, 0x07, 0x00, 0x00, 0x00 };
netStream.Write(msg1, 0, msg1.Length);
string str = byteToHexStr(msg1);
NS++;
rtb.AppendText("主站发送的报文为:" + str + "\r\n");
//client.receivebuffersize接收缓冲区的大小
dataread dr = new dataread(netStream, tcpclient.ReceiveBufferSize);
//开始接受数据
netStream.BeginRead(dr.msg, 0, dr.msg.Length, new AsyncCallback(ReadCallBack), dr);
}
else
{
txtState.Text = "连接服务器失败,请检查服务器地址或端口!";
}
}
public string byteToHexStr(byte[] bytes)//转化成16进制数
{
string returnStr = " ";
Color Color = rtb.SelectionColor;
SetTextColor(Color.Blue);
if (bytes != null)
{
for (int i = 0; i < bytes.Length; i++)
{
returnStr += bytes[i].ToString("X2");
if (((i + 1) % 6) == 0)
returnStr += " ";
}
}
return returnStr;
}
private void SetTextColor(Color color)
{
rtb.Select(rtb.Text.Length, 0);
rtb.SelectionColor = color;
}
private void ReadCallBack(IAsyncResult ar)
{
try
{
dataread dr = (dataread)ar.AsyncState;
int rec = (ar);
string Msg = Encoding.UTF8.GetString(dr.msg, 0, rec);
if (Msg != string.Empty)
{
string str1 = byteToHexStr(dr.msg);
rtb.AppendText("主站收到的报文为:" + str1 + "\r\n");
}
if (isExit == false)
{
dr = new dataread(netStream, tcpclient.ReceiveBufferSize);
netStream.BeginRead(dr.msg, 0, dr.msg.Length, ReadCallBack, dr);
}
}
catch (Exception ex)
{
txtState.Text = ex.Message;
}
}
private void connect_Click(object sender, EventArgs e)
{
try
{
Connect();
connect.Enabled = false;
Stopconnect.Enabled = true;
ServerIP.Enabled = false;
Port.Enabled = false;
}
catch (Exception ex)
{
txtState.Text = ex.Message;
}
}
private void Stopconnect_Click(object sender, EventArgs e)
{
Stopconnect.Enabled = false;
connect.Enabled = true;
ServerIP.Enabled = true;
Port.Enabled = true;
tcpclient.Close();
txtState.Text = "已与服务器断开!";
}
}
}
新手分数不多,见谅!
[ 本帖最后由 ZY137867312 于 2014-4-16 09:29 编辑 ]