[求助]异步通信中使用fixed绑定指针的问题
本人写了一个socket通信的小程序,目前能实现C/S之间的正常数据传送。现在希望能在 异步调用的OnReceiveData的方法中增加一个将收到的数据写入文件的功能。
因为指针的关系,所以必须“ 绑定 ” 内存。(绑定这个词似乎不太准确)。
使用fixed语句。
文件写入的代码部分如下:
private unsafe void AddIntoFile(string ss)
{
string strT = ss; //ss字符串是客户端传送给主机端口的数据。主机端接收到数据以后就调用 AddIntoFile函数,将收到的数据作为参数传过来
byte[] buf=new byte[4096];
System.Text.ASCIIEncoding ae = new ASCIIEncoding();
buf = ae.GetBytes(strT);
int l;
l = buf.Length;
fixed (byte* p = buf)
{
//byte* pp = p;
stlc.AddToHead(ref *p, l, 0);
/////////////////////////////////////////////////////////////////////////////////////////
stlc.AddToHead(ref *p, l, 0);
该函数是引用的dll中的。我也只知道其中的函数以及参数而已。
ref byte Telegram; 引用的要传送的报文
int Length; 报文的实际长度
int IsOverWrite 这个我不清楚,只知道用0就好。
/////////////////////////////////////////////////////////////////////////////////////////
}
}
从文件中读出的代码:
private unsafe void btnReadData_Click(object sender, EventArgs e)
{
byte[] buf = new byte[4086];
int l;
fixed (byte* p = buf)
{
try
{
if (stlc.Size > 0)
{
l = stlc.GetFromTail(ref *p, 0);
stlc.DelFromTail(1);//从尾部读出报文并删除
MessageBox.Show(Encoding.ASCII.GetString(buf, 0, l));
}
else
{
MessageBox.Show("no data");
}
}
catch (Exception et)
{
MessageBox.Show(et.Message);
}
}
}
现在测试情况是:如果在一个单独的单线程程序中运行,这两个函数都可以正确的运行,写入文件和读出文件都可以运行成功。
但是放在异步调用的Server端的接收数据的回调函数中的时候,就只能读出发送的第一个字母。
比如 :Send taserq
Read: t????? 或者是:t 。。。的某种乱码形式