写的一个程序,,分客户端和服务的,用的是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 不了解,
求各位大鸟帮忙解决..    

解决方案 »

  1.   

    第一次估计你的connectFlag 还没有为True,跟踪一下看看
    你只是在OnError 中写了showmessage,但是并没有阻止程序继续运行,可能就会导致出错,调试一下吧,看看错在哪个地方
      

  2.   


    跟踪了,发现第一次点击发送按钮,程序没有进去ClientSocket的onconnect事件..
    我在ClientSocket的onconnect事件中设了断点,但是在第二次点击发送按钮的时候程序还是没有在断点处停留,但是服务器端却接收到了信息..
      

  3.   

    1 连接和发送最好分开2个按钮。因为ClientSocket.Active:=true;这句是需要时间的,不分开的话后面也要sleep一下2 OnError事件弹出错误对话框后加一句 ErrorCode := 0;
      

  4.   

    安装目录下有DEMO自己研究一下
      

  5.   

    socket的安裝目錄下有demo,看下demo的源碼就知道了