搜索
bottom↓
回复: 18

跪求 uip1.0 作为客户端 主动连接 服务器的示例!

[复制链接]

出0入0汤圆

发表于 2011-6-15 18:28:06 | 显示全部楼层 |阅读模式
前几天下了一个 STM32 的 uip 例程 ,里面是一个 telnet 的例程,我换了我经常用的那个库,按照说明 测试 ping 和 telnet 都正常,这应该说明 这个uip 没问题了,后来我尝试改成 主动连接到 我的网络调试助手建的服务器,结果是中联不上 整了好些 时间感觉要崩溃了,调用那个 uip_connect() 始终没反应,用这两条语句 连不上服务器
           uip_ipaddr(ipaddr, 192,168,1,240);        //        目的地址
        uip_connect((uip_ipaddr_t *)ipaddr , HTONS(80) );
哪位 uip 达人有这样,作为客户端,主动连接服务器的例子,麻烦传一份上来,不胜感激啊

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2011-6-15 22:53:35 | 显示全部楼层
楼主的网卡芯片是Enc28j60吗,如果是:
在enc28j60_uip.c里将“switch(uip_conn->lport)”的lport改成rport
应用层用uip_connect,不用uip_listen,这是主动连接

出0入0汤圆

 楼主| 发表于 2011-6-16 15:47:18 | 显示全部楼层
回复【1楼】whimsy
-----------------------------------------------------------------------

试过了,这种方法,没有enc28j60_uip.c 这个文件

定义了       #define UIP_ACTIVE_OPEN 1

也定义了处理函数       #define     UIP_APPCALL    Client_Connect_appcall

调用           uip_ipaddr(ipaddr, 192,168,1,240); // 目的地址  
               uip_connect((uip_ipaddr_t *)ipaddr , HTONS(8080) );
来初始化

还是不行,用抓包工具,似乎没有发出连接请求 SYN 包

使用监听
      uip_connect((uip_ipaddr_t *)ipaddr , HTONS(8080) );
初始化并且用  网络调试助手 当 客户端 就连得上

数据也是对的。难道还需要改什么地方吗?

出0入0汤圆

发表于 2011-6-16 16:41:12 | 显示全部楼层
可能是uip_connect 连接前uip arp表还没有对应的地址

出0入0汤圆

发表于 2011-6-27 17:21:28 | 显示全部楼层
TO:楼主,你的回调函数tcp_server_appcall中没有加入switch(uip_conn->rport)”针对HTONS(8080)处理代码,当然还是不行

出0入0汤圆

发表于 2011-8-9 01:20:44 | 显示全部楼层
顶一下.....

出0入0汤圆

发表于 2011-9-8 01:37:33 | 显示全部楼层
调uip_connect后UIP其实就初始化了一下结构数据,没有向外发数据的动作的,等到UIP对每个TCP连接轮流处理2次才开始连接,连接成功后uip_connected()为真。

按如下处理可以快速连接
struct uip_conn *u;
uip_ipaddr(ipaddr, 192,168,1,240); // 目的地址  
u=uip_connect(&ipaddr , HTONS(80) );
if(u==NULL)
{
  //这里要做错误处理。               
  return ;
}
uip_periodic_conn(u);
if(uip_len== 0)
{
      uip_periodic_conn(u);//由于在uip_connect时conn->timer = 1,"
                          //"所以必须调用uip_periodic_conn两次uip才会准备数据"
}
if(uip_len > 0)
{
  uip_arp_out();
  tapdev_send();
}   

//可以选择循环调用UipPro(uip协议栈的实现入口),直到连接成功。

---------------------------------------------------------------------
连接成功后要把u记下来,主动发送数据方法如下
uip_conn =u;
uip_send(data, datalen);
uip_process(UIP_TIMER);
if(uip_len > 0)
{
  uip_arp_out();
  tapdev_send();
}       

UIP要做完整还是要充分使用struct uip_conn中的uip_tcp_appstate_t appstate

出0入0汤圆

发表于 2011-9-8 09:35:03 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-9-28 21:27:22 | 显示全部楼层
回复【6楼】hnthw
-----------------------------------------------------------------------

能否发一份TCP主动连接的程序参考一下呢?252655388@qq.com

出0入0汤圆

发表于 2011-11-14 23:15:27 | 显示全部楼层
to:hnthw
能否也发一份TCP主动连接的程序参考一下呢?QQ:33508691,jxncxy@sohu.com,mcus是STM32+ENC28J60,谢谢

出0入0汤圆

发表于 2011-11-15 10:11:23 | 显示全部楼层
参考uip例程里那个webclient。
BTW,男儿膝下有黄金啊。

出0入0汤圆

发表于 2012-9-9 21:36:31 | 显示全部楼层
mark~~~~      

出0入0汤圆

发表于 2012-9-11 11:04:43 | 显示全部楼层
呵呵,同求

出0入0汤圆

发表于 2013-4-20 20:12:24 | 显示全部楼层
hnthw 发表于 2011-9-8 01:37
调uip_connect后UIP其实就初始化了一下结构数据,没有向外发数据的动作的,等到UIP对每个TCP连接轮流处理2 ...

楼主的这部分代码放在什么地方比较合适的哪

出0入0汤圆

发表于 2013-4-23 01:23:40 | 显示全部楼层
hnthw 发表于 2011-9-8 01:37
调uip_connect后UIP其实就初始化了一下结构数据,没有向外发数据的动作的,等到UIP对每个TCP连接轮流处理2 ...

楼主的想法是不错的,只是调用uip_send函数应在uip_process(UIP_TIMER);之后会更好些额

出0入0汤圆

发表于 2013-5-28 11:58:37 | 显示全部楼层
楼主问题解决了没?

出0入0汤圆

发表于 2013-8-6 20:05:45 | 显示全部楼层
mark


                     

出0入0汤圆

发表于 2015-1-21 11:41:50 | 显示全部楼层
搞了很久都没搞定啊
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-16 19:40

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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