主要结合两位大侠的回复 1 先添加一个类如下:
C# code
class DataReceivedArgs : EventArgs
{
public string Msg { get; protected set; } public DataReceivedArgs(string msg)
{
Msg = msg;
}
}接着,我在tcpsocketlayer.cs里添加如下代码
// 声明
public event EventHandler<DataReceivedArgs> DataReceived;
// socket 异步接收函数
public void OnReceivedData(IAsyncResult ar)
{
if (!ar.IsCompleted)
{
return;
}
Socket s = (Socket)ar.AsyncState;
try
{
int size = s.EndReceive(ar);
string sss = "";
if (size > 0)
{
for (int i = 0; i < size; i++)
{
sss += bufferReceive[i].ToString("x2");
}
//globalTasString = sss;
//llrpReciveTriger = true;
}
// 事件驱动
if (DataReceived != null)
{
DataReceived(this, new DataReceivedArgs(sss));
}// 将sss 返回给界面层调用 s.BeginReceive(bufferReceive, 0, 1024, SocketFlags.None, new AsyncCallback(OnReceivedData), s);
}
catch (SocketException E)
{
}
}
最后就是界面上调用 异步通信了 声明一个委托
public delegate void EventHandler(object sender, EventArgs e); private void button3_Click(object sender, EventArgs e)
{
ts.sendCommandCode(cmd);
ts.DataReceived += new EventHandler<DataReceivedArgs>(Foo);
} private void Foo(object sender, DataReceivedArgs e)
{
//do someting
MessageBox.Show(e.Msg);
} 上面是在两位大侠的指导下,完成,,测试可以
程序运行后,连接
然后点击一次按钮,发送一串命令
服务器端,返回一个应答
问题出现在连续发送时
当第二次,点击按钮,发生命令包时, 服务器端,接受到一次命令
并发生一次响应(我用的是网络调试助手做服务器端),手动点击发送按钮
客户端,居然收到了2次响应 当我第三次,点击按钮时
服务器端,还是受到1次命令包
同时,也回一次响应
此时,客户端,收到了3次响应
看来还是有点问题呀,,,哪里没处理对呢? 谢谢
C# code
class DataReceivedArgs : EventArgs
{
public string Msg { get; protected set; } public DataReceivedArgs(string msg)
{
Msg = msg;
}
}接着,我在tcpsocketlayer.cs里添加如下代码
// 声明
public event EventHandler<DataReceivedArgs> DataReceived;
// socket 异步接收函数
public void OnReceivedData(IAsyncResult ar)
{
if (!ar.IsCompleted)
{
return;
}
Socket s = (Socket)ar.AsyncState;
try
{
int size = s.EndReceive(ar);
string sss = "";
if (size > 0)
{
for (int i = 0; i < size; i++)
{
sss += bufferReceive[i].ToString("x2");
}
//globalTasString = sss;
//llrpReciveTriger = true;
}
// 事件驱动
if (DataReceived != null)
{
DataReceived(this, new DataReceivedArgs(sss));
}// 将sss 返回给界面层调用 s.BeginReceive(bufferReceive, 0, 1024, SocketFlags.None, new AsyncCallback(OnReceivedData), s);
}
catch (SocketException E)
{
}
}
最后就是界面上调用 异步通信了 声明一个委托
public delegate void EventHandler(object sender, EventArgs e); private void button3_Click(object sender, EventArgs e)
{
ts.sendCommandCode(cmd);
ts.DataReceived += new EventHandler<DataReceivedArgs>(Foo);
} private void Foo(object sender, DataReceivedArgs e)
{
//do someting
MessageBox.Show(e.Msg);
} 上面是在两位大侠的指导下,完成,,测试可以
程序运行后,连接
然后点击一次按钮,发送一串命令
服务器端,返回一个应答
问题出现在连续发送时
当第二次,点击按钮,发生命令包时, 服务器端,接受到一次命令
并发生一次响应(我用的是网络调试助手做服务器端),手动点击发送按钮
客户端,居然收到了2次响应 当我第三次,点击按钮时
服务器端,还是受到1次命令包
同时,也回一次响应
此时,客户端,收到了3次响应
看来还是有点问题呀,,,哪里没处理对呢? 谢谢
解决方案 »
- Socket多线程
- silverlight开发的程序能在手机上浏览吗
- 怎么改变vs2005调试用的网站地址?
- 初学C#,关于水晶报表的简单问题~!急
- DataTable.Clear方法后,为什么内存不回收?
- 请问wpf项目中,我用的VS2012开发,请问能否使用Sqlite数据库了?
- 已知n个点坐标,求覆盖所有点的最小面积圆的算法代码
- .net2.0中的webbrowser控件如何设置代理服务器?
- 菜啊,我这都不会,大家帮帮忙。
- 在线紧急求援! 从外部如何读取DataList表格中的核选框(每一行一个)值?先谢谢!!! 急用。。。
- C#怎么将 第二个窗口里面填写的值 用到第一个窗口?
- 求指教C#网络的mac层通讯
{
ts.sendCommandCode(cmd);
ts.DataReceived += new EventHandler<DataReceivedArgs>(Foo);
}
不要每次点击都 += ,你在初始化时,+=一次就行了
ts.DataReceived += new EventHandler<DataReceivedArgs>(Foo);这句放到外面去,放到界面初始化时
不行 我是放在form_load里
我是放在form_load里
真不行 啥也收不到
不过现在放 界面初始化里OK了
InitializeComponent();
这个后面就可以了