clientsocket问题(100分)

  • 主题发起人 主题发起人 benice
  • 开始时间 开始时间
B

benice

Unregistered / Unconfirmed
GUEST, unregistred user!
不能向服务器端连续发送,我的结构如下:
client-->server一个字串 1
server-->client一个字串 2
client-->server一个字串 3这一步server不能接受
必须在2,3中加入一条showmessage(),不管show什么都行,这样第三步server才能收到client发的字段
求救,立即给分的.
 
不是很明白你的意思?是不是想让服务器确认一下?是不是?
代码不长的话可帖出来看看?
 
不会的,我已经做过了,是可以连续发送的。
首先client.send->server.onclientread
然后在server.onclientread中server.send->client.read
接着在client.read中client.send->server.onclientread
重复上述步骤...[:I]
 
估计应该是你发送语句在程序中的位置不合理所致!
应该是向YoungSun写的那样。事件必须放在合适的位置。
你说用showmessage就可以了,只是因为在你响应showmessage的时间范围内,socket中的
数据已经处理完毕了。例:
Client.connect := true;
Client.Send
这样是错误的,你应该在client的onconnected事件中写Client.Send,但是如果你在两句
之中增加一个对话框需要操作员响应的话,结果就会是对的。
 
我在clientsocket设127。0。0。1就可以,但连接其他server就不行
代码如下,我第一次在另一个函数中发送字串
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var rec:string;
begin
rec:=socket.ReceiveText ;
if copy(rec,1,4)='LIST' then //server收到我发的字串后返回的字串
begin
clientsocket1.Close ;
clientsocket1.open ;
showmytable(copy(rec,5,length(rec)-4),stringgrid1); //用返回字串生成一个表
//sleep(1000); //sleep没有用
//showmessage('a');
clientsocket1.Socket.SendText('122^AE^'); //如果上面的showmessage不执行,这句话server就收不到
end;
 
为什么要用
clientsocket1.close;
clientsocket1.open;
这两句?
前面我所说的内容你又给碰上了。仔细分析一下,你这样的做法和我给你的错误示例一样。
 
如果不用这两句,那连加showmessage都不行了,你说我该怎么改那?
能说详细一点么?谢谢了
 
你还是没有明白。你这段代码是不能放在一个地方顺序执行的。首先你在客户端发出请求后,
要等待服务器端回应(服务器端也可能不会回应,就应该进行超时处理),然后在客户端的
onread事件中取得服务器发来的信息,判断后执行下一步操作。
简言之,你上述代码是要放在不同的事件中执行。
 
帮你改一下
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var rec:string;
begin
rec:=socket.ReceiveText ;
if copy(rec,1,4)='LIST' then //server收到我发的字串后返回的字串
begin
showmytable(copy(rec,5,length(rec)-4),stringgrid1); //用返回字串生成一个表
Socket.SendText('122^AE^'); //如果上面的showmessage不执行,这句话server就收不到
end;

试试上面的代码?
 

Similar threads

后退
顶部