问个socket的简单的通讯的问题,请大家指点一二,socket编程我不太熟悉

lyfxzzb 2008-08-18 06:32:39
用TClientSocket和TServerSocket简单做了个程序,怎么客户端再发送第二个字符串后得不到服务端发送的信息呢?
在客户端中tempStr1 是空,我想得到的是 'filenameok',请大家指点下

客户端部分代码如下:
Socket.SendText('uplodpic');
tempStr:= Socket.ReceiveText;
if tempStr='uploadok' then //开始传输
begin
ClientSocket1.Socket.SendText('filename');
tempStr1:= ClientSocket1.Socket.ReceiveText;
.....
end

服务端部分代码如下:
tempStr:= Socket.ReceiveText;
if tempStr='uplodpic' then
begin
Socket.SendText('uploadok');
fileName:= Socket.ReceiveText;
if fileName<>'' then
begin
Socket.SendText('filenameok');
end;
end
...全文
120 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
DelphiFans 2008-08-19
  • 打赏
  • 举报
回复
看INDY的DEMO是最好的!
oosmile 2008-08-19
  • 打赏
  • 举报
回复
上面copy错了

procedure .....ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
tempStr:= Socket.ReceiveText;
if tempStr='uploadok' then //开始传输
begin
ClientSocket1.Socket.SendText('filename');
tempStr1:= ClientSocket1.Socket.ReceiveText;
.....
end
end;


procedure ...ServerSocket1Accept(Sender: TObject;
Socket: TCustomWinSocket);
begin
tempStr:= Socket.ReceiveText;
if tempStr='uplodpic' then
begin
Socket.SendText('uploadok');
fileName:= Socket.ReceiveText;
if fileName <>'' then
begin
Socket.SendText('filenameok');
end;
end
end;
oosmile 2008-08-19
  • 打赏
  • 举报
回复
是啊,收发都先到事件里面。

procedure .....ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
Socket.SendText('uplodpic');
end;




procedure ...ServerSocket1Accept(Sender: TObject;
Socket: TCustomWinSocket);
begin
tempStr:= Socket.ReceiveText;
if tempStr='uploadok' then //开始传输
begin
ClientSocket1.Socket.SendText('filename');
tempStr1:= ClientSocket1.Socket.ReceiveText;
.....
end;
end;
panrongzeng 2008-08-19
  • 打赏
  • 举报
回复
在接收事件上返回不行嗎?
lyfxzzb 2008-08-19
  • 打赏
  • 举报
回复
谢谢,对socket编程不熟悉,实际我想这样:
比如:
1、客户端发送一个 a,服务端收到 a 后,发送一个 aok 给客户端;
2、客户端收到 aok 后,再发送一个 b ,服务端收到 b 后,发送一个 bok 给客户端;
3、客户端收到 bok 后,再发送一个 c ,服务端收到 c 后,发送一个 cok 给客户端;
我用的是TClientSocket和TServerSocket,大家给个思路和demo吧


手指风 2008-08-19
  • 打赏
  • 举报
回复
你的代码是放在哪的?可能是你的思路有问题.非堵塞模式你直接这样写估计不行的吧.你写到onrecive里根据得到的文本判断下.如果有连续性加个编号什么的。
lyfxzzb 2008-08-19
  • 打赏
  • 举报
回复
好像不行,再顶一下
kernelj 2008-08-19
  • 打赏
  • 举报
回复
tempStr1:= ClientSocket1.Socket.ReceiveText;

在进行接收之前先检测服务端是否有返回,加上检测代码试试看。

while Socket.ReceiveText='' do
sleep(1);
tempStr1:= ClientSocket1.Socket.ReceiveText;
lyfxzzb 2008-08-19
  • 打赏
  • 举报
回复
再顶一下,也就是为什么不能连续发送,如果连续发送应该注意什么,如何实现

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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