高手请入:一个非常有挑战性的问题 (悬赏100大洋)(100分)

  • 主题发起人 主题发起人 aq100
  • 开始时间 开始时间
to aq100:
接受部分很容易做,一般是用recv();接受和TClienSocket和TServerSocket的接受文件
形式一样,你可以看他们的对应方法,都是调用Recv();
至于断开连接,一般是利用select()的超时和一些自定义格式数据来判断。
select()定义一个时间,如果在这个时间没有数据传输就主动关闭套接字
 
to aq100:
function MyLoadSocket:bool;
加载Socket资源,任何其他函数调用之前调用(只需一次),成功则返回true
procedure MyUnLoadSocket;
释放资源,最后调用。
Function MyConnect(vport:integer;vaddr:string):bool;
连接,vport为端口号 vaddr 为IP地址 成功则返回true
function MyRecv(vData:pchar;vLen:integer;vTimeout:integer):integer;
接收数据 vdata 存放接收的数据 vLen能接收的数据的最大长度
vtimeout 超时设置(毫秒)
返回值:如大于0,则接收成功。返回值为接收到的字节数
注意:有可能接收到的字节数小于vLen
等于0则为超时
如小于0,返回值则是Winsock的错误码的负值(如返回-10035,
则对应Winsock的错误码为10035)
procedure MyClose;
关闭socket,连接断开

 
我的信箱是:riceworm@sohu.com
大虾能不能发个demo过来啊,非常感谢。


 
to aq100:
是说我吗?这里的大侠很多哦!^_^
 
是啊,我觉得你还是可以帮助我的。
 
非常感谢吴大哥,你发的Demo我已经收到啦,还有个问题想问一下,你这种方式是不是
得写个timer时时检查是否有接收到新的消息啊。
 
不需要,因为myrecv就有超时设置,在这里建议设置为1000即1秒。循环调用。
这样如果有数据就会立即返回,没有数据也会在1秒后返回。让你有机会
检测是否有你感兴趣的事件发生,如程序是否退出等。其实这已经类似于
一个定时器了。
 
还有一个在帮助中没说明,如果超时设置为0,则只有收到数据才能返回。否则
将永远等待。
 
非常感谢吴兄的顶力相助,我觉得你的接收数据还是比较被动,不像控件中的那样,有
数据来就触发,也许我还没把你那个研究透吧,现在我在timer中时时检测,虽然有点被
动不过也还算可以啦。真是非常感谢,同时也非常谢谢无忌老兄的帮助,在此一并谢过。
 
后退
顶部