用TWinSocketStream接收不到数据
ClientSocket用阻塞方式,thread中创建,
TClientSocket *pClientSocket=new TClientSocket(NULL);
pClientSocket->Address="127.0.0.1";
pClientSocket->Port=7500;
pClientSocket->ClientType=ctBlocking;
pClientSocket->Active=true;
void __fastcall socketthread::Execute()
{
//---- Place thread code here ----
TClientSocket *pClientSocket=new TClientSocket(NULL);
pClientSocket->Address="127.0.0.1";
pClientSocket->Port=7500;
pClientSocket->ClientType=ctBlocking;
pClientSocket->Socket->ClientType=ctBlocking;
pClientSocket->Active=true;
while(!Terminated)
{
if(pClientSocket->Active)
{
const int nBufferCount=2000;
char cBuffer[nBufferCount];
TWinSocketStream *pStream;
try
{
pStream = new TWinSocketStream(pClientSocket->Socket, 4000);
try
{
memset(cBuffer,0,nBufferCount);
pStream->WaitForData(4000);
//char quest[]="wait";
//pStream->Write(quest.strlen(quest));
int i=pStream->Read(cBuffer,strlen(cBuffer));
Form1->Edit2->Text=AnsiString(cBuffer);
}
catch (Exception &E)
{
::MessageBox(NULL,E.Message.c_str(),"eerr",MB_OK);
}
}
__finally
{
delete pStream;
}
}
}
}
ServerSocket在ClientConnect事件中写
void __fastcall TForm1::ServerSocket1ClientConnect(TObject *Sender,
TCustomWinSocket *Socket)
{
Socket->SendText("ServerSocket1ClientConnectokok");
}
但是接受不到数据,不用thread,ClientSocket用非阻塞,在onread事件却可以独到,help me
问题点数:30、回复次数:3Top
1 楼zTommy(抓狂中。。。。)回复于 2001-12-03 09:43:07 得分 10
你的这几行代码
TClientSocket *pClientSocket=new TClientSocket(NULL);
pClientSocket->Address="127.0.0.1";
pClientSocket->Port=7500;
pClientSocket->ClientType=ctBlocking;
pClientSocket->Socket->ClientType=ctBlocking;
pClientSocket->Active=true;
不要放进Execute()里面
Top
2 楼wyly()回复于 2001-12-07 13:17:54 得分 10
我也遇到同样问题。我是TserverSocket用ThreadBlockingTop
3 楼copy_paste(木石三)回复于 2001-12-07 13:49:54 得分 10
{
memset(cBuffer,0,nBufferCount);
if pStream->WaitForData(4000) //如果返回成功(有信息来)
{
//char quest[]="wait";
//pStream->Write(quest.strlen(quest));
int i=pStream->Read(cBuffer,strlen(cBuffer));
Form1->Edit2->Text=AnsiString(cBuffer);
}
在Block方式和你用Thread方式来读取数据,最好用MsgWaitForMultipleObjects来等待ClientSocket1->Socket->SocketHandle触发的读或close信息,主要它还可以接受消息。
Top




