| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1594 人关注过本帖
标题:[求助]异步通信数据读写入文件问题
取消只看楼主 加入收藏
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
收藏
 问题点数:0 回复次数:11 
[求助]异步通信数据读写入文件问题
异步通信程序,采用 BeginAccept,EndAccept。。。。。BeginReceive以及EndReceive。
现在为了测试程序的强壮性,在无间隔的while循环中进行数据的发送并将之写入文件。
public void AddintoMyfile(string ss)
{
ss 是收到的字符串
string path = @"D:\MyTestListener.txt";
// This text is added only once to the file.
if (!File.Exists(path))
{
// Create a file to write to.
using (StreamWriter sw = File.CreateText(path))
{
sw.WriteLine(ss);
//sw.WriteLine("And");
//sw.WriteLine("Welcome");
}
}
// This text is always added, making the file longer over time
// if it is not deleted.
using (StreamWriter sw = File.AppendText(path))
{
sw.WriteLine(ss);

}
}

结果比如发送ss=textbox
文件中就会出现 他的重复版本
textboxtextbox。。。textbox
中间的个数具体不定。

请问有没有解决的方法。


搜索更多相关主题的帖子: 异步 通信 数据 文件 
2006-08-31 16:08
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
收藏
得分:0 
public void OnReceiveData(IAsyncResult ar)
{
//Socket was the passed in object
//Every time instantialize a new socket...
ReceiveDone.Set();
Sock = (Socket)ar.AsyncState;
//Check if we got any data
//If there are words....

try
{
//Timer_Refresh();

int nBytesRec = Sock.EndReceive(ar);
ReceiveDone.Set();
if (nBytesRec > 0)
{
string ss = Encoding.ASCII.GetString(Receive_Buffer, 0, nBytesRec);
listBox_Receive.Items.Add(ss);
AddintoMyfile(ss);
Sock.BeginReceive(Receive_Buffer, 0, Receive_Buffer.Length,
SocketFlags.None,
new AsyncCallback(OnReceiveData),
Sock);
ReceiveDone.WaitOne();
}
}
catch (Exception ex)
{
listBox_Receive.Items.Add(ex.Message + "Un usual error druing Recieve!");
}


}


2006-08-31 16:09
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
收藏
得分:0 
好像是接收的时候,如果上一个的还没有处理完,下一个数据又来了,就堆在一起,然后等我这个处理完,再读发过来的数据的时候,就一块读进来了


2006-08-31 16:29
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
收藏
得分:0 
正常收发都可以实现,写进文件也是正确的。
但是因为实际工作中需要 ms级的间隔来接收报文,所以就用的while循环。。
然后就,,,


2006-08-31 16:48
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
收藏
得分:0 
我现在没有用while了,现在用的是timer 。。。。
汗 。。。。

间隔为50ms

还是偶尔出错。


2006-08-31 16:58
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
收藏
得分:0 
那个,我这里往外发邮件好像一直死着,打网页倒是能打开,就是有点慢。。。还在发,已经好几分钟了。。。。汗。。。

恩,那个要求大概就是ms级的数据发送了。。。
所以就用timer了,难道用while,那样子文件更恐怖。

2006-08-31 17:18
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
收藏
得分:0 
似乎刚刚发过去了。。。
chenjin,我单步调试的时候就跟正常运行又有很大差别,我现在也不知道怎么弄得了。。。
帮我看看吧。。

2006-08-31 17:20
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
收藏
得分:0 

以后注意。。。。

太感谢了哦。。

2006-08-31 17:43
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
收藏
得分:0 
以下是引用chenjin145在2006-8-31 17:59:50的发言:
waitone
set 沒必要用吧

用也是在
呼叫beginreceive前 waitone
endreceive後set一次


循環來循環去我都沒 多出數據


你是直接用的我的程序运行的吗? 没有多处数据?
晕。。使用数字测试的吗?


2006-08-31 18:03
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
收藏
得分:0 
循环发送数据是用的timer还是while?
timer我的interval=50ms
运行的结果就是我发给你的那个txt文档。

2006-08-31 18:05
快速回复:[求助]异步通信数据读写入文件问题
数据加载中...
 
   



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

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