搜索
查看: 4936|回复: 4

TCP客户端

[复制链接]

8

主题

124

帖子

905

积分

三级会员

Rank: 4

积分
905
发表于 2012-12-14 14:02:45 | 显示全部楼层 |阅读模式
我在做TCP客户端实验的时候发现客户端不能发送断开客户端的事件给服务器,看过库文件,写的Tcp.close()
但是实际测试确实没有实现断开功能,具体的代码如下:
声明:我是刚刚开学学习aardio编程,没有编程的基础的,希望高手指点指点,谢谢。
  1. import win.ui;
  2. //client 客户端
  3. import wsock;
  4. import wsock.err;
  5. import win;
  6. import win.ui.menu;
  7. import com.picture;
  8. import wsock.tcp.client;
  9. /*DSG{{*/
  10. var winform = ..win.form( bottom=399;parent=...;right=599;text="aardio Form" )
  11. winform.add(
  12. button2={ bottom=161;right=148;left=72;top=130;z=7;text="发送";cls="button" };
  13. static2={ bottom=75;text="端口号:";left=188;right=239;top=58;transparent=1;z=5;cls="static" };
  14. edit={ right=183;bottom=77;text="127.0.0.1";left=118;top=53;z=2;edge=1;cls="edit" };
  15. button={ bottom=115;text="链接";left=79;top=82;z=6;right=186;cls="button" };
  16. static={ bottom=73;text="IP地址:";left=74;right=114;top=56;transparent=1;z=4;cls="static" };
  17. groupbox={ bottom=123;right=312;left=68;top=27;z=1;text="groupbox";edge=1;cls="groupbox" };
  18. edit2={ right=286;bottom=75;text="6000";left=242;multiline=1;top=54;z=3;edge=1;cls="edit" }
  19. )
  20. /*}}*/

  21. //链接网络服务器按钮函数
  22. winform.button.oncommand = function(id,event){
  23.         //winform.msgbox( winform.button.text );
  24.         var tcp = wsock.tcp.client()
  25.         if(winform.button.text="链接"){
  26.          tcp.connect("127.0.0.1",6000)
  27.                 winform.button.text="断开"       
  28.         }
  29.         else {
  30.         tcp.close();//这样不能给服务器一个断开链接的消息
  31.         wsock.close();//这样也还是不行,
  32.         winform.button.text="链接";
  33.         }       
  34. }

  35. winform.show()
  36. win.loopMessage();
复制代码
这个问题苦恼了一一个礼拜了,我看过帮助文档,没有单独的介绍。谢谢各位
回复

使用道具 举报

16

主题

186

帖子

1404

积分

四级会员

Rank: 6Rank: 6

积分
1404
发表于 2012-12-14 14:09:08 | 显示全部楼层

var tcp = wsock.tcp.client() 放到 oncommand外面 看一下手册里的,变量,变量作用范围.

var tcp = wsock.tcp.client() 放到 oncommand外面
看一下手册里的,变量,变量作用范围.
回复

使用道具 举报

8

主题

462

帖子

2551

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2551
发表于 2012-12-14 14:20:02 | 显示全部楼层

不是客户端断开了,服务端就会马上自己断开。 网络是一个很不稳定的环境,如果这样的话,那我们就要不停的掉线了。 可以使用心跳包,间隔一定的时间发一个包,告

不是客户端断开了,服务端就会马上自己断开。
网络是一个很不稳定的环境,如果这样的话,那我们就要不停的掉线了。

可以使用心跳包,间隔一定的时间发一个包,告诉对方自己还没死,收不到就是断了。
服务端也可以发送测试包,发送失败也就是断了。
回复

使用道具 举报

8

主题

124

帖子

905

积分

三级会员

Rank: 4

积分
905
 楼主| 发表于 2012-12-14 14:30:51 | 显示全部楼层

[quote][size=2][color=#999999]roger 发表于 2012-12-14 14:20[/color] [url=forum.php?

roger 发表于 2012-12-14 14:20
不是客户端断开了,服务端就会马上自己断开。
网络是一个很不稳定的环境,如果这样的话,那我们就要不停的 ...

谢谢指点,我做了相应的修改,可以了
原来是变量的作用域的问题,
我链接断开一次之后下次就不能进行链接了
是不是还需要使用一条什么循环执行的代码
我的代码如下:
  1. import win.ui;
  2. //client 客户端
  3. import wsock;
  4. import wsock.err;
  5. import win;
  6. import win.ui.menu;
  7. import com.picture;
  8. import wsock.tcp.client;
  9. /*DSG{{*/
  10. var winform = ..win.form( bottom=399;parent=...;text="aardio Form";right=599 )
  11. winform.add(
  12. button2={ bottom=161;text="发送";left=72;top=130;z=7;right=148;cls="button" };
  13. static2={ bottom=75;right=239;left=188;text="端口号:";top=58;z=5;transparent=1;cls="static" };
  14. edit={ text="127.0.0.1";bottom=77;right=183;left=118;top=53;z=2;edge=1;cls="edit" };
  15. button={ bottom=115;right=186;left=79;top=82;z=6;text="链接";cls="button" };
  16. static={ bottom=73;right=114;left=74;text="IP地址:";top=56;z=4;transparent=1;cls="static" };
  17. groupbox={ bottom=123;text="groupbox";left=68;top=27;z=1;right=312;edge=1;cls="groupbox" };
  18. edit2={ text="6000";bottom=75;right=286;left=242;multiline=1;top=54;z=3;edge=1;cls="edit" }
  19. )
  20. /*}}*/
  21.         var tcp = wsock.tcp.client()

  22. //链接网络服务器按钮函数
  23. winform.button.oncommand = function(id,event){
  24.         //winform.msgbox( winform.button.text );
  25.         if(winform.button.text="链接"){
  26.          tcp.connect("127.0.0.1",6000)
  27.                 winform.button.text="断开"       
  28.         }
  29.         else {
  30.         tcp.close();//
  31.         wsock.close();//
  32.         winform.button.text="链接";
  33.         }       
  34. }

  35. winform.show()
  36. win.loopMessage();

复制代码
回复

使用道具 举报

8

主题

124

帖子

905

积分

三级会员

Rank: 4

积分
905
 楼主| 发表于 2013-1-7 13:01:30 | 显示全部楼层

问题解决了

问题解决了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2020-8-15 12:18 , Processed in 0.062500 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表