用TServerSocket收大量数据时老掉数据,怎么办?
关于SendText,我用SendText发送一个文件时,发现ServerSocket接收爱掉数据,
加了延时好了许多,但是在我接收同时还在运行其他程序时,还会发生掉数据的现象。请问这是因为我的
程序是单线程的原因吗?有没有什么办法解决呢?
问题点数:20、回复次数:8Top
1 楼tiger_qi(老虎)回复于 2002-05-29 11:51:03 得分 5
最好用多线成来解决把
Top
2 楼tiger_qi(老虎)回复于 2002-05-29 11:54:10 得分 5
在创建线成的时候把TClientsocket或TServerSoket传递到线成里面在那里面执行数据的传输把
good luckTop
3 楼tiger_qi(老虎)回复于 2002-05-29 11:54:57 得分 0
在创建线成的时候把TClientsocket或TServerSoket传递到线成里面在那里面执行数据的传输把
good luckTop
4 楼Tony_2002(Builder迷)回复于 2002-05-29 12:25:47 得分 0
怎么把TClientsocket或TServerSoket传递到线程里啊,能给个例子吗?谢谢Top
5 楼quietman(小高同志)回复于 2002-05-29 12:31:26 得分 0
学习学习Top
6 楼superaf(阿斐)回复于 2002-05-29 12:42:23 得分 5
SOCKET 一次传递的最大数据包是2k,你看看你送的时候是否超过了。Top
7 楼caoguangxin(广昕)回复于 2002-05-29 13:27:49 得分 0
实际上TServerSocket是很稳定的,不会出现丢数据的现象,很多人抱怨丢数据的原因是许多人不知道接收数据的时候,如果只接收一次可能是不完全的,要多收几次肯定会完整的。Top
8 楼tiger_qi(老虎)回复于 2002-05-29 13:31:24 得分 5
/---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "IcThread.h"
#include "IcOp.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
// Important: Methods and properties of objects in VCL can only be
// used in a method called using Synchronize, for example:
//
// Synchronize(UpdateCaption);
//
// where UpdateCaption could look like:
//
// void __fastcall CheckCard::UpdateCaption()
// {
// Form1->Caption = "Updated in a thread";
// }
//---------------------------------------------------------------------------
//这里我重载了线成构造函数,把HANDLE h句并传递进去了,你可以同样把你希望//的控件传进来的
__fastcall CheckCard::CheckCard(bool CreateSuspended,HANDLE h)
: TThread(CreateSuspended)
{
flag = -1 ;
H=h;
}
//---------------------------------------------------------------------------
void __fastcall CheckCard::Execute()
{
/*检测IC卡是否插入
Lparam = 1 有卡
Lparam = 0 无卡
flag = 1
*/
while (!this->Terminated)
{
if (HaveIC())
{
SendMessage(H,WM_USER + 100,flag,1);
flag = 1;
}
else
{
SendMessage(H,WM_USER + 100,flag,0);
flag = 0;
}
}
//---- Place thread code here ----
}
//-----------------------------------------------Top
9 楼Tony_2002(Builder迷)回复于 2002-05-29 14:09:23 得分 0
superaf(啊斐)我一次传的数据绝对没有2k,关键是数据在被连续不断的发送
也没有机会象(广昕)说的那样多收几次。
谢谢tigerqi的例子,我会好好研究的。
谢谢大家。请继续讨论。Top




