delphi里clientsocket控件的问题!急!急!急!

tang_xue 2001-04-19 06:10:00
我用clientsocket1.socket.sendbuf(myPCA2C2ISMG,sizeof(myPCA2C2ISMG));发送信
息,却不成功!请问什么原因?高手们帮帮忙!!!
其中myPCA2C2ISMG为记录类型!
...全文
463 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
kkk321 2001-04-21
  • 打赏
  • 举报
回复
关注
kingsong 2001-04-20
  • 打赏
  • 举报
回复
怎样叫几个信息。
可以信息之间加上自定义的分割符如#,然后一次发送,这需要接收方判断了。
我也没试过,如果发送方不停的执行sendtext,接收方read事件中来不及处理怎么办,是先放到缓存中,再一次处理收到的所有信息呢?还是发送方每个sendtext都会使接收方产生一个read事件。
tang_xue 2001-04-20
  • 打赏
  • 举报
回复
kingsong如果我用ClientSocket1.Socket.SendText('') ,怎么一次把几个信息送出去呀?
clacklin 2001-04-20
  • 打赏
  • 举报
回复
sizeof后面好象要+1吧?
kingsong 2001-04-20
  • 打赏
  • 举报
回复
我用的是这个ClientSocket1.Socket.SendText('')
tang_xue 2001-04-20
  • 打赏
  • 举报
回复
为什么没人帮我!
tang_xue 2001-04-20
  • 打赏
  • 举报
回复
请帮帮忙啊!
kingsong 2001-04-20
  • 打赏
  • 举报
回复
另:我想说说我用ClientSocket&ServerSocket的几点体会:
1、这类程序通讯不是重点,关键是C-S之间的通信协议,在写码之前,先好好搞搞。
2、当ServerSocket提供一个端口,而有多个ClientSocket去联时,那ServerSocket端将依次产生若干个Connection,为Connection[0],Connection[1]...,而ServerSocket靠这个来区分与哪个ClientSocket进行通信,这将是非常麻烦的事。因为当有一个ClientSocket断了时,余下的Connectiong将依次前移,即若Connection[m]断了,Connection[n]将变为Connection[n-1](n>m),那Server如何确定与哪个Client通讯。请教某大虾,说是做一些Health Check,Server每隔一段时间向所有Connection发信息,而Client即发个短信息标明身份。然后存放在一数组里。实现起来好像也很麻烦。
3、ServerSocket是用一个Read事件来接收信息,因此必须判断是哪个ClientSocket发来的,因此ClientSocket发信息时要带上自己的标识。(说到底是通信协议问题)。
4、若是ClientSocket.Active:=false,那ServerSocket将会立刻触发ClientDisconnect事件。而若是网线断了,则会需要很长时间。
题外话,曾开发过打字比赛用的软件,比赛前一天一切OK,比赛那天,与ServerSocket怎么也联不通(网络当然没问题),丢了一个大脸,到现在也不知道是什么原因。老天啊,给我个理由吧。
kingsong 2001-04-20
  • 打赏
  • 举报
回复
是什么不成功?是服务器端什么信息都收不到吗?建议几点:
1、保证端口一致,并且退出时一定将active:=false;否则不能二次运行。
2、用sendtext,肯定可以,我试过了。
3、将Tmyrecord中的string改为string[10],定个长度。我试了试,服务器端可以收到信息,但不知为何多了很多乱码。
供参考。
你程序没错。
tang_xue 2001-04-20
  • 打赏
  • 举报
回复
kingsong,你一定要帮帮我,是先放到缓存中,再一次处理收到的所有信息?我怎么才能一次发送一个记录类型的所有信息?下面是我错误的程序,请问我该怎么改?
Tmyrecord=record
NO:string;
name:string;
age:integer;
...
end;
myrecord:Tmyrecord;

if clientsocket1.Active=true then
clientsocket1.Active:=false;
with clientsocket1 do
begin
host:='192.168.4.142';
port:=1010;
active:=true;
socket.sendbuf(myrecord,sizeof(myrecord));
end;

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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