Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
LwIP Socket Client 出错 "error 10053" 求助
发布于 2010-03-25 13:08:24 浏览:12074
订阅该版
我从SVN上下载的最新版本移植到自己的开发板上,采用net/apps下的程序作为测试程序,tcpserver.c运行没有问题,但是tcpclient.c在连接Server时出现问题,连接要等很久(1分左右)Server才有反应,但是Server会报10053的错误,如果此时通过Server发数据给Client,会报10054的错误,不知道这是什么问题,该如何解决? 试了一下,UDP Client是没有问题的。也许是超时的原因吧,不知道超时设置在哪里。 ![TcpClient.jpg](https://oss-club.rt-thread.org/uploads/1712_2870dfcbbf30a9b90bc751a45b51efec.jpg)
查看更多
12
个回答
默认排序
按发布时间排序
bernard
2010-03-25
这家伙很懒,什么也没写!
信息太少了,再详细描述下吧: 如何测试?什么平台?采用了什么软件做PC上的服务端?另外,以太网的问题最好能够给一个抓包的报文文件。
Zengwn
2010-03-26
这家伙很懒,什么也没写!
210为Client, 215为Server, Server用过Socket Tool,也用过自已写的,应该没什么关系。 [attach]399[/attach]
bernard
2010-03-26
这家伙很懒,什么也没写!
>信息太少了,再详细描述下吧: > >如何测试?**什么平台?**采用了什么软件做PC上的服务端?另外,以太网的问题最好能够给一个抓包的报文文件。 --- 驱动有问题吗?这个还在TCP 3次握手的位置,似乎像是设备不容易收到包(SYNC ACK),SYNC发了几次
Zengwn
2010-03-26
这家伙很懒,什么也没写!
是ARM7的内核,非市面上那种通用MCU,这个应该没关系,驱动应该也没问题,TCP Server和UDP都没问题的。 握手确实不太对,第三次的数据没有。 我试了用焦海波移植的那个1.2的版本也是这种情况,难道别人都没我这样的问题吗?
bernard
2010-03-26
这家伙很懒,什么也没写!
还是怀疑是你驱动的问题,有的时候serv比较好,那么可能是因为它只测试到一个方向。而另外一个方向有可能会断断续续的。 你的是什么ARM7,SEP4020?建议做几个驱动方面的测试。
Zengwn
2010-03-26
这家伙很懒,什么也没写!
>还是怀疑是你驱动的问题,有的时候serv比较好,那么可能是因为它只测试到一个方向。而另外一个方向有可能会断断续续的。 > >你的是什么ARM7,SEP4020?建议做几个驱动方面的测试。 --- 非常感谢bernard, “驱动方面的测试”这个要怎么做?我试过Netio,TX没问题,RX总是失败。但是UDP Client却是可以的,如果单从握手上去分析,怎么下手?
bernard
2010-03-26
这家伙很懒,什么也没写!
>>还是怀疑是你驱动的问题,有的时候serv比较好,那么可能是因为它只测试到一个方向。而另外一个方向有可能会断断续续的。 >> >>你的是什么ARM7,SEP4020?建议做几个驱动方面的测试。 > >--- > > >非常感谢bernard, >“驱动方面的测试”这个要怎么做?我试过Netio,TX没问题,RX总是失败。但是UDP Client却是可以的,如果单从握手上去分析,怎么下手? --- 直接调用驱动的函数进行数据包收发发送,然后在PC上用抓包工具抓。设备上的收发都用串口打印出来,和抓包工具抓到的报文比较。 “Netio,TX没问题,RX总是失败。”这个已经很能说明问题了,驱动收发有一方是有问题的。相同的RT-Thread/LwIP代码,已经很多人验证过是不存在你这种问题的,所以完全可以排除上层的问题。
zx2591
2012-05-18
这家伙很懒,什么也没写!
刚用RT-thread不久,请教个问题。 服务器地址:192.168.1.52 子网掩码:255.255.255.0 网关:192.168.1.1 主机监听端口号:4663 请问应该怎样调用tcpclient(const char* url, int port), 主要是应该定义一个怎样的参数,传给const char* url 哪位老大帮下忙,谢谢。 修复了一个例程tcpserver.c断开后连不上的bug,能实时检测到客户端断开,可以反复断开重连。 论坛传附件功能好像有bug,不好传我直接贴代码。 哪位帮忙解答下上面的问题,谢谢。 QQ:727222615 #include
#include
/* 使用BSD Socket接口必须包含sockets.h这个头文件 */ static char send_data[512] = "This is TCP Server from RT-Thread."; /* 发送用到的数据 */ #define No_dat_count_exit_time 2000 void tcpserv(void* parameter) { char *recv_data; /* 用于接收的指针,后面会做一次动态分配以请求可用内存 */ rt_uint32_t sin_size; int sock, connected, bytes_received; rt_uint16_t No_dat_count; struct sockaddr_in server_addr, client_addr; rt_bool_t stop = RT_FALSE; /* 停止标志 */ recv_data = rt_malloc(1024); /* 分配接收用的数据缓冲 */ if (recv_data == RT_NULL) { rt_kprintf("No memory\n"); return; } /* 一个socket在使用前,需要预先创建出来,指定SOCK_STREAM为TCP的socket */ if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) { /* 创建失败的错误处理 */ rt_kprintf("Socket error\n"); /* 释放已分配的接收缓冲 */ rt_free(recv_data); return; } /* 初始化服务端地址 */ server_addr.sin_family = AF_INET; server_addr.sin_port = htons(5000); /* 服务端工作的端口 */ server_addr.sin_addr.s_addr = INADDR_ANY; rt_memset(&(server_addr.sin_zero),8, sizeof(server_addr.sin_zero)); /* 绑定socket到服务端地址 */ if (bind(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1) { /* 绑定失败 */ rt_kprintf("Unable to bind\n"); /* 释放已分配的接收缓冲 */ rt_free(recv_data); return; } /* 在socket上进行监听 */ if (listen(sock, 5) == -1) { rt_kprintf("Listen error\n"); /* release recv buffer */ rt_free(recv_data); return; } rt_kprintf("\nTCPServer Waiting for client on port 5000...\n"); while(stop != RT_TRUE) { sin_size = sizeof(struct sockaddr_in); /* 接受一个客户端连接socket的请求,这个函数调用是阻塞式的 */ connected = accept(sock, (struct sockaddr *)&client_addr, &sin_size); /* 返回的是连接成功的socket */ /* 接受返回的client_addr指向了客户端的地址信息 */ rt_kprintf("I got a connection from (%s , %d)\n", inet_ntoa(client_addr.sin_addr),ntohs(client_addr.sin_port)); /* 客户端连接的处理 */ while (1) { /* 发送数据到connected socket */ send(connected, send_data, strlen(send_data), 0); /* 从connected socket中接收数据,接收buffer是1024大小,但并不一定能够收到1024大小的数据 */ bytes_received = recv(connected,recv_data, 1023, 0); if (bytes_received < 0) { /* 接收失败,关闭这个connected socket */ lwip_close(connected); break; } /* 有接收到数据,把末端清零 */ recv_data[bytes_received] = '\0'; if (strcmp(recv_data , "q") == 0 || strcmp(recv_data , "Q") == 0) { /* 如果是首字母是q或Q,关闭这个连接 */ lwip_close(connected); break; } else if (strcmp(recv_data, "exit") == 0) { /* 如果接收的是exit,则关闭整个服务端 */ lwip_close(connected); stop = RT_TRUE; break; } else {//////////////////////////////////////注意下面 if(bytes_received>0) { /* 在控制终端显示收到的数据 */ rt_kprintf("RECIEVED DATA = %s \n" , recv_data); strcpy(send_data,recv_data); send(connected, send_data, strlen(send_data), 0); bytes_received=0; } else { rt_kprintf("客户端 (%s , %d) 已断开连接\n", inet_ntoa(client_addr.sin_addr),ntohs(client_addr.sin_port)); lwip_close(connected); if(No_dat_count++>No_dat_count_exit_time) { stop = RT_TRUE; } break; } } } } /* 退出服务 */ lwip_close(sock); /* 释放接收缓冲 */ rt_free(recv_data); return ; } #ifdef RT_USING_FINSH #include
/* 输出tcpserv函数到finsh shell中 */ FINSH_FUNCTION_EXPORT(tcpserv, startup tcp server); #endif
bernard
2012-05-18
这家伙很懒,什么也没写!
tcpserver.c/tcpclient.c可以从svn上更新下,这个问题是因为漏掉了接收到0字节数据的判断。 另外,你的问题是板子做服务端还是设备端?tcpclient连接一个服务端,例如服务端地址是192.168.0.1,监听端口是100,则用法是: ``` tcpclient("192.168.0.1", 100); ```
zx2591
2012-05-18
这家伙很懒,什么也没写!
呵呵,谢谢,服务器的已经调通了。我启动两个线程,一个作为服务器,另一个作为客户端
撰写答案
登录
注册新账号
关注者
0
被浏览
12.1k
关于作者
Zengwn
这家伙很懒,什么也没写!
提问
1
回答
3
被采纳
0
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
7
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
3
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部