TClientSocket为什么SendBuf后就出错了?

hqylfy 2002-12-28 10:06:34
TClientSocket调用SendBuf后就出错,错误代码是10061,请问高手着是怎么回事?
...全文
100 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
iamleejun 2003-02-18
  • 打赏
  • 举报
回复
mark
hqylfy 2002-12-31
  • 打赏
  • 举报
回复
用的是ServerSocket,没有用Service Application
l_clove 2002-12-29
  • 打赏
  • 举报
回复
你的服务端是一个Application还是Service Application,如果是Application的话,建议你把Code Guard打开,我怀疑你的服务端访问了非法地址,导致断线,ClientSocket和ServerSocket还算是稳定的...
cuilin2002 2002-12-28
  • 打赏
  • 举报
回复
TClientSocket **ClientSocket;
for (int i=0;i<5;i++)
{
ClientSocket[i]=new TClientSocket(this);
ClientSocket[i]->Address =IP[i];//IP是一个数组
ClientSocket[i]->Port =2500;
ClientSocket[i]->OnConnect =Client->OnConnect ;
ClientSocket[i]->OnError =Client->OnError ;
ClientSocket[i]->OnDisconnect =Client->OnDisconnect ;
ClientSocket[i]->OnRead =Client->OnRead ;
ClientSocket->Active =true;
ClientSocketList.push_back(ClientSocket);
}
cuilin2002 2002-12-28
  • 打赏
  • 举报
回复
一般我碰到这种问题,都是服务器没有监听
l_clove 2002-12-28
  • 打赏
  • 举报
回复
就是OnClientRead的事件里。
l_clove 2002-12-28
  • 打赏
  • 举报
回复
不好意思,没看出什么问题,服务器端接受段里有没有类似于ServerSocket->Socket->SendBuf()的代码?
hqylfy 2002-12-28
  • 打赏
  • 举报
回复
呵呵 ,少了这个动态数组的定义了
vector<TClientSocket *> ClientSocketList;//建立对象动态数组
hqylfy 2002-12-28
  • 打赏
  • 举报
回复
Client是一个ClientSocket的Name。
hqylfy 2002-12-28
  • 打赏
  • 举报
回复
我是用动态对象数组的
Buton1::Click
{
for (int i=0;i<5;i++)
{
TClientSocket *ClientSocket=new TClientSocket(this);
ClientSocket->Address =IP[i];//IP是一个数组
ClientSocket->Port =2500;
ClientSocket->OnConnect =Client->OnConnect ;
ClientSocket->OnError =Client->OnError ;
ClientSocket->OnDisconnect =Client->OnDisconnect ;
ClientSocket->OnRead =Client->OnRead ;
ClientSocket->Active =true;
ClientSocketList.push_back(ClientSocket);
}
}
Button2::Click
{
String IP=Edit1->Text;
char *Command;
vector<TClientSocket *>::iterator p; //定义叠代器
while (!feof(fpTL))
{
p=ClientSocketList.begin() ;
TClientSocket *Cs;
while (p!=ClientSocketList.end() )
{
Cs=*p;
if (Trim(Cs->Address)==IP )//如果找到
{
if (Cs->Active )
{//取得文件名
int j=0;Byte buflen;
buflen=Trim(Edit2->Text).Length();
strcpy(Command,Trim(Edit2->Text).c_str());
buflen=Cs->Socket->SendBuf(Command,buflen);
}
}//end if Active
}//end if locate
p++;
}//end while
}第一次发送成功后就出错了
jishiping 2002-12-28
  • 打赏
  • 举报
回复
不是说“不能都在事件里响应”,而是应该怎么写的问题。使用Non-Blocking模式,就必须等到OnConnect事件出现后才可以发送数据。如果是使用ctBlocking模式,就可以在Active=true;之后马上发送数据。这是使用TClientSocket的规矩,不能违反规矩行事,否则只能导致错误。
hqylfy 2002-12-28
  • 打赏
  • 举报
回复
如果我不发送的话他都是连接正常的,但是调用了一次SendBuf后就出错了。第一次发送是成功的,发送成功了就出现10061了。我用的就是ClientSocket->Socket->SendBuf.这样有什么问题么?我想实现网络间通信的!不能都在事件里响应。
l_clove 2002-12-28
  • 打赏
  • 举报
回复
哦,不是方法,是事件
l_clove 2002-12-28
  • 打赏
  • 举报
回复
确保你在ClientSocket和ServerSocket的方法中使用的是Socket->SendBuf,就是带有Socket参数的那种,而不是ClientSocket->Socket->SendBuf和ServerSocket->Socket->SendBuf。
jishiping 2002-12-28
  • 打赏
  • 举报
回复
用Non-Blocking模式,必须在OnConnect事件出现后才可以发送数据。不能在
使用Active=true;之后马上发送数据。而如果是ctBlocking模式,就可以在
Active=true;之后马上发送数据。
hqylfy 2002-12-28
  • 打赏
  • 举报
回复
代码太长了,不方便贴出来。通过断点单步调试依然会出现这种错误。不过我是连续发两次数据,第一次能够发送成功,第二次再要发的话就发现Connected为false了,本来在代码中我在错误事件中屏蔽了错误植,后来检查发现发送了第一次后就出现10061错误,而且是在执行了SendBuf后。
l_clove 2002-12-28
  • 打赏
  • 举报
回复
把你的代码贴出来看看,我遇到过同样的问题,不敢确定
kingfish 2002-12-28
  • 打赏
  • 举报
回复
不是我的解释
10061就代表这个意思
l_clove 2002-12-28
  • 打赏
  • 举报
回复
通常这个错误在Socket->Open()后过一段时间出现,你保证Socket->Connected值为true么?
hqylfy 2002-12-28
  • 打赏
  • 举报
回复
我是在连接已经建立了起来以后才SendBuf的。服务端可以收到内容,但是收了就断开了。
加载更多回复(6)

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧