社区
网络及通讯开发
帖子详情
TClientSocket为什么SendBuf后就出错了?
hqylfy
2002-12-28 10:06:34
TClientSocket调用SendBuf后就出错,错误代码是10061,请问高手着是怎么回事?
...全文
105
26
打赏
收藏
TClientSocket为什么SendBuf后就出错了?
TClientSocket调用SendBuf后就出错,错误代码是10061,请问高手着是怎么回事?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
TCl
ient
Socket
和TServer
Socket
属性,方法,事件
Delphi
Socket
s程序设计 Cl
ient
Socket
和Server
Socket
,它们对Winsock的API进行了很好的封装生成了
TCl
ient
Socket
和Tserver
Socket
两个类(控件)。通过这两个控件,可以很方便的生成TCP/IP网络应用程序。
TCl
ient
Socket
类是客户端的
Socket
类,通过它可以与服务器程序建立TCP连接,并进行数据交换。TserverSoc
Delphi之TServer
Socket
和
TCl
ient
Socket
属性、方法、事件
Delphi的Socke介绍 Cl
ient
Socket
和Server
Socket
,它们对Winsock的API进行了很好的封装生成了
TCl
ient
Socket
和Tserver
Socket
两个类(控件)。通过这两个控件,可以很方便的生成TCP/IP网络应用程序。
TCl
ient
Socket
类是客户端的
Socket
类,通过它可以与服务器程序建立TCP连接,并进行数据交换。Tserver
Socket
是服务...
Delphi
socket
连接.net
Socket
这几天一直研究Delphi连接.net的
socket
程序,终于有一些进展。需求:服务端截取前4个字节,转换为数字,次数字为业务代码。将决定调用哪个业务逻辑。using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Net.
Socket
s; using System
Delphi中Server
Socket
与Cl
ient
Socket
通信实战详解
传完了怎么通知对方“我发完了”?几种方法:发特殊标记,比如”EOT”关闭写通道(shutdown(SD_
SEND
))依赖文件头里的FileSize字段计数截止推荐第三种最靠谱。为了防止数据截断,还可以搞个双向确认:// 发送方最后说一句// 接收方验证无误后回复// 发送方收到ACK才真正Close这样双方都知道传输圆满完成,不会出现“我以为你收到了,其实你没收到”的尴尬局面。到这里,基本功能都齐了。但要想真正上线运行,还得加上最后一层保险——可靠性保障机制。
delphi的
socket
通讯
Cl
ient
Socket
组件为客户端组件。它是通信的请求方,也就是说,它是主动地与服务器端建立连接。 Server
Socket
组件为服务器端组件。它是通信的响应方,也就是说,它的动作是监听以及被动接受客户端的连接请求,并对请求进行回复。 Server
Socket
组件可以同时接受一个或多个Cl
ient
Socket
组件的连接请求,并与每个Cl
ient
Socket
组件建立单独的连接,进行单独的通信。因此
网络及通讯开发
1,317
社区成员
8,874
社区内容
发帖
与我相关
我的任务
网络及通讯开发
C++ Builder 网络及通讯开发
复制链接
扫一扫
分享
社区描述
C++ Builder 网络及通讯开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章