socket 问题

happyxiaowuge 2010-09-08 11:20:11
写的一个程序,,分客户端和服务的,用的是TClientSocket和TServerSocket元件,客户端页面有一button发送按钮 单击事件代码如下:
GetIpAndPort();----设置要连接到的服务器IP地址和端口..(自己写的,从外部ini文件获取)
ClientSocket.Active:=true;
if connectFlag then
begin
ClientSocket.Socket.sentText('hello');
end;

其中connectFlag为一public变量,在ClientSocket的onconnect事件里设置 connectFlag:=true;
在窗体的onshow 事件里 设置 connectFlag:=false;
在ClientSocket的OnError 事件里写了一句代码 showmessage(‘服务器没开!’);

服务器窗体中我放了个ServerSocket 元件,在Form的onshow事件里设置了 ServerSocket.active:=true;
然后在ServerSocket的onClientRead 事件里写: showmessage(Socket.ReceiveText);

但是现在出现了2个问题不知道如何解决,想了一天了..
问题1..在开了服务器的状态下,点击客服端的发送按钮,第一次点击时服务器总是收不到消息,而接下来的每次都收的到, 怎样才能在第一次点击时服务器就收到消息..是不是我的代码哪个地方没写..

问题2..在没开服务器的状态下,点击客服端的发送按钮,弹出对话框“服务器没开”,但是关闭了对话框之后,又弹出错误提示对话框,关闭这个对话框,程序也被关了..我要求关闭onError事件弹出的对话框后,程序没有关闭..

我是第一次用这东西,对Socket的API 不了解,
求各位大鸟帮忙解决..


...全文
45 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
kye_jufei 2010-09-09
  • 打赏
  • 举报
回复
socket的安裝目錄下有demo,看下demo的源碼就知道了。。。
蜗牛1985 2010-09-09
  • 打赏
  • 举报
回复
安装目录下有DEMO自己研究一下
happyxiaowuge 2010-09-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]
第一次估计你的connectFlag 还没有为True,跟踪一下看看
你只是在OnError 中写了showmessage,但是并没有阻止程序继续运行,可能就会导致出错,调试一下吧,看看错在哪个地方
[/Quote]

跟踪了,发现第一次点击发送按钮,程序没有进去ClientSocket的onconnect事件..
我在ClientSocket的onconnect事件中设了断点,但是在第二次点击发送按钮的时候程序还是没有在断点处停留,但是服务器端却接收到了信息..
haitao 2010-09-08
  • 打赏
  • 举报
回复
控件方式,不用了解api的吧
bdmh 2010-09-08
  • 打赏
  • 举报
回复
第一次估计你的connectFlag 还没有为True,跟踪一下看看
你只是在OnError 中写了showmessage,但是并没有阻止程序继续运行,可能就会导致出错,调试一下吧,看看错在哪个地方
老之 2010-09-08
  • 打赏
  • 举报
回复
1 连接和发送最好分开2个按钮。因为ClientSocket.Active:=true;这句是需要时间的,不分开的话后面也要sleep一下

2 OnError事件弹出错误对话框后加一句 ErrorCode := 0;

5,388

社区成员

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

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