| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2968 人关注过本帖
标题:异步tcp通讯程序中读写文件的问题--第一次发帖请多关照
取消只看楼主 加入收藏
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
收藏
得分:0 
.................
晕死。
那2005的能看吗?
我是在Server的接收端的异步接收函数
public unsafe void OnReceiveData(IAsyncResult ar)
中调用AddIntoFile这个函数的。
运行程序之前,要么点击Initialization或者Start进行初始化文件。
然后才能往文件里写。
ts very much

2006-08-10 11:35
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
收藏
得分:0 
因为我原来也用的时是2003,后来转化成的05。对代码没有什么修改,如果没有05的话,我想只要把程序的代码贴到一个新项目里面就可以了吧。05的东西我几乎还没有怎么用。

main函数中有个CheckForIllegalCrossThreadCalls = false;这句话是因为05 不允许跨线程调用其它的windows控件。我给加进去的。如果报错,可以删掉。


2006-08-10 11:45
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
收藏
得分:0 
中午回去吃饭了。。
所以。。。。。。。


不过,我不知道他怎么用的,公司里就是要我用这个dll的函数做。不知道可不可以用fso。
我再研究研究好了。

汗一个:ultraedit我还是不知道怎么看内码。。。没用过。只知道功能强大。代码进去我自己都看不明白。不知道要看什么。

无论如何
感谢各位的帮忙。

2006-08-10 14:28
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
收藏
得分:0 
我这里有那个dll的文件。。。
要是你有时间可以看的话,我发给你。。。应该能注册吧。



2006-08-10 14:50
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
收藏
得分:0 
发过去了。。。
我在网上。
邮件也可以。

2006-08-10 15:10
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
收藏
得分:0 
....那就是说程序不能移植吧,每次移植的时候还要带上dll文件?
。。。。。。。。。。。。。。。。。。。。我还以为可以直接用。。

2006-08-10 15:38
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
收藏
得分:0 
你是把struct的一个数据成员,一个fixed char[] telegram 写入文件。
但是,我那个程序中使用的是 byte *p = &data
也就是说,是把id号,那些东西全部都写入文件。他那个好像是加过密的,所以,只能看到数据而已。
我看过,使用add 功能,可以很清楚的看到每次加入的字符串。
但是另外两个
id 什么的就看不见了。

而在读的时候,写dll的人是为了方便而言,直接判断并读出一个具有特定id号的telegram。

我是为了测试,所以才这样写这个id号。
但是即使这样,我写入文件中,并不能像写dll的人的程序,可以看到每次加入的字符串。
我在socket中受到的string不能加入进去。看不到
用他的就可以看到。


如果用fixed(byte *p = buf) 确实可以使用fixed语句,它可以绑定未确定的地址,
因为我现在是测试版本,将来所有写入文件的报文我将增加搜索功能。就是按照一定的id号或者什么其它的标志来搜索并取出来的。
所以必须要用 byte *p = &data

即是说要将结构体所有的成员传递进去。包括id 以及作为真正报文内容的telegram.

这个时候,如果用fixed想要绑定的话就报错。因为它认为这个是定长的数据。

如果要求将结构体所有的成员传递进去。包括id 以及作为真正报文内容的telegram,
那要怎么改呢?


谢谢。

2006-08-10 17:16
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
收藏
得分:0 
自己顶一个。。。。
那个可以改嘛?

2006-08-11 08:15
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
收藏
得分:0 
private unsafe void button1_Click(object sender, System.EventArgs e)
{
Test_Struct data = new Test_Struct();
byte[] bt;
string strV = "Hello, this is a test";
//bt = strV.ToCharArray();
bt = Encoding.ASCII.GetBytes(strV);
int l=bt.Length;
data.tel_id = 99887;
data.test_data = 99999;
data.Telegram=new byte[l];
bt.CopyTo(data.Telegram,0);
//System.Runtime.InteropServices.Marshal.Copy(bt, 0, data.Telegram, bt.Length);
///Buffer.BlockCopy(bt, 0, data.Telegram, 0, bt.Length);
//data.Telegram = strV;
//ip = new IntPtr((void *)data.Telegram);
//System.Runtime.InteropServices.Marshal.Copy(bt,0,ip,bt.Length);
//MessageBox.Show(data.Telegram[0].ToString());

fixed(byte *p = data.Telegram)
{
//p = (byte *)data.Telegram;
try
{
stlc.AddToHead(ref p[0], l,1);
}
catch (Exception et)
{
MessageBox.Show(et.Message);
}
}
strV = string.Format("After add data. total {0} telegrams in list", stlc.Size);
MessageBox.Show(strV);
}



你给我的写入文件代码中有几个问题,不能运行。
最主要的是:
fixed(byte * pp=data.Telegram)
提示:错误 14 不能使用 fixed 语句来获取已固定的表达式的地址
由于我一直不知道什么叫做已固定的表达式,实在不知道如何改。
fixed(byte * pp=data) 这样子也不行
所以,即使我想要在真正的报文前面加入两个id号到时候截断字符串也无法成功。



2006-08-11 17:01
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
收藏
得分:0 
data.Telegram=new byte[l];
byte数组之间不能如此赋值
必须用 System.Runtime.InteropServices.Marshal.Copy 而在该函数中,必须有一个参数为 Intptr类型。
public static void Copy (byte[] source,    int startIndex,    IntPtr destination,int length)


2006-08-11 17:07
快速回复:异步tcp通讯程序中读写文件的问题--第一次发帖请多关照
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013833 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved