社区
Delphi
帖子详情
动态创建TClientSocket后的问题!
HF
2000-03-26 07:04:00
我想把Socket控件包到dll中去,问如何动态创建
TClientSocket?
我这样做
var
ClientSocket:TClientSocket
.......
ClientSocket:=TClientSocket.Create(nil)
但在 ClientSocket.Open之后要一个ShowMessage()后才能发数据,不知道如何解决?
请指教!谢谢!
...全文
430
11
打赏
收藏
动态创建TClientSocket后的问题!
我想把Socket控件包到dll中去,问如何动态创建 TClientSocket? 我这样做 var ClientSocket:TClientSocket ....... ClientSocket:=TClientSocket.Create(nil) 但在 ClientSocket.Open之后要一个ShowMessage()后才能发数据,不知道如何解决? 请指教!谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
HF
2000-04-05
打赏
举报
回复
yangfan:
问题是我在Dll中,没有Form,有Form的话就简单啦!
yangfan
2000-04-05
打赏
举报
回复
那你就自己做个从TObject继承来的类把ClientSocket包装起来不就行了吗!!
在它Create时做上面的初始化工作!
如果还有问题email to: zangyongli@263.net
yangfan
2000-03-31
打赏
举报
回复
与hook没什么关系的!
在你的form中加入如下procedure
procedure MySocketConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure MySocketConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure MySocketDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure MySocketError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure MySocketRead(Sender: TObject; Socket: TCustomWinSocket);
Create你的ClientSocket时
ClientSocket:= TClientSocket.Create(nil);
ClientSocket.Address := YourServiceIP;
ClientSocket.OnConnect := MySocketConnect;
ClientSocket.OnDisconnect := MySocketDisConnect;
ClientSocket.OnError := MySocketError;
ClientSocket.OnRead := MySocketRead;
ClientSocket.Active := TRUE;
bConnected := FALSE;
然后在你的
procedure MySocketConnect中令 bConnected := TRUE;
发送数据时判断bConnected即可。
注意在procedure MySocketError 中要将ErrorCode:=0;
Good Luck!!
HF
2000-03-30
打赏
举报
回复
yangfan:
如何动态的写OnConnect事件呢? 还有设置完CbNoBlocking后,如何处理Hook?
yangfan
2000-03-29
打赏
举报
回复
忘了告诉你,TClientSocket.Create(nil) 没问题的,
只是你必须在退出时手工Free.
yangfan
2000-03-29
打赏
举报
回复
cbNoBlocking 非阻塞模式,open后立即会返回,但这时并不表示与服务器建立了联结,只有ClientSocket.OnConnect事件发生后,才表示联结成功,你可以先设立一个通信是否联结的标记,初值为False,在OnConnect中把它置TRUE,在发送数据时判断此标记即可!
HF
2000-03-28
打赏
举报
回复
工作模式我也设了,在open之后是ClientSocket.ClientType :=cbNoBlocking(异步吧,可能拼错了)但跟踪Active还是False,
我在水木清华上看到也有一篇类似的文章,他指出是由于没有工作模式,但还提到消息机制,不知如何理解?sunsetyang你也不妨去看看,有什么好的建议一定要赐教啊!呵呵!谢了!
HF
2000-03-27
打赏
举报
回复
SoftCrazy:
感谢你的回答。
还是有问题,我去掉ShowMessage后,加上了Sleep(1000);这样的话就出现100054错误,不能发数据。
你说的调用在哪里呢?我Open后,就开始SendText了!
还有我写的 ClientSocket:=TClientSocket.Create(nil) 注意这个nil,我不知道这样对不对?有没有什么问题?(在dll中,没有Form)
谢了!
sunsetyang
2000-03-27
打赏
举报
回复
你应该设置一下她的工作模式吧!
E
2000-03-26
打赏
举报
回复
我的理解是:
ClientSocket.Open() 并不等待连接建立好,而是立即返回.
所以Open 后的代码在第一次运行时连接一般还没有建立好,因此不能发送数据.
而你响应showmessage至少要用一两秒时间,此时连接一般已经建立好,故可以
发送数据.
连接建立好之后ClientSocket.OnClientWrite()会被调用,你不妨在此发送你
的第一个数据包.
sunsetyang
2000-03-26
打赏
举报
回复
什么意思?能不能说清楚一点?你将你的发送部分代码贴出来看一下。
Delphi深度编程技术
8.3.1
TCl
ient
Socket
组件 8.3.2 TServer
Socket
组件 8.3.3 远程抓屏示例 8.4 通讯中间件的制作 8.4.1 磁盘队列的实现 8.4.2 客户端和服务器端发送接收磁盘队列数据的套接字的建立 8.4.3 中间件的简单应用 第...
《Delphi 深度编程及其项目应用开发》PDF书及代码
11.2.4 合同管理数据结构的设计 11.2.5 基础设置数据结构的设计 第12章 应用服务器的实现 12.1 创建应用服务器的实例 12.2 状态区编程 12.3 动态数据库的连接 12.4 远程数据模块的建立 第13章 客户端应用程序的设计 ...
Tcl
ient
Socket
组件
Tcl
ient
Socket
组件主要作为客户端的套接字使用。它封装了客户端的套接字,在与服务器建立连接之后,就负责管理这个连接,在结束连接后关闭套接字。属性:active:设置CL
IENT
SOCKET
是否打开CL
IENT
TYPE:设置...
BCB
Socket
通信
TCl
ient
Socket
2. Host属性:服务器主机名称,当Host和Address都指定时,
Tcl
ient
Socket
将使用Host属性工作 3. Port属性: int型,设置套接字端口号,如6767 4. Activate属性:true:与服务器建立连接;false:与服务器...
bcb 如何在DLL中捕捉系统级异常
---------------------------------------------...我创建了一个动态库,库中实现了对
Socket
(TCP、UDP)的封装,其中使用了BCB的
TCl
ient
Socket
,当使用该Cl
ient
Socket
去连接一个并不存在的服务器时必然导致会ESock...
Delphi
5,388
社区成员
262,729
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章