您好!
我正在使用 TI-RTOS NDK 栈通过 TCP/IP 套接字连接将 PC 连接到 TM4C129微控制器。 我在 PC 端使用套接字测试应用程序。
当 PC 是服务器(接受来自微控制器的连接)、微控制器是客户端(使用连接 API)时、我能够建立连接。
然而,当 PC 是客户端(尝试连接到微控制器)并且微控制器是服务器(创建套接字、绑定、监听然后尝试接受)时,微控制器将在 Accept ()函数时锁定,从不会看到来自 PC 的连接请求。
我下面的代码中是否存在可能导致该问题的原因? 这个代码和 TI 示例应用(enet_tcpecho_server_tirtos)之间的唯一区别是、我将微控制器配置为使用静态 IP、而不是通过 DHCP 分配给它。 这是否与问题有关?
注:
- 在 Accept 时编写以下代码块、从不打印"Accept socket success"(接受套接字成功)(也不命中 break 语句)。
- 我在 PC 防火墙上启用了本地和远程 TCP 端口、以确保不存在防火墙问题。
微控制器作为服务器代码:
serverListenSocket =套接字(AF_INET、SOCK_STREAM、IPPROTO_TCP);
如果(serverListenSocket == socket_error)
{
中断;
}
system_printf ("创建套接字成功。\n");
system_flush();
memset (&localAddress、0、sizeof (localAddress));
localAddress.sin_family = AF_INET;
localAddress.sin_addr.s_addr = inet_addr ("192.168.1.20");
localAddress.sin_port = htons (50000);
status = bind (serverListenSocket、(struct sockaddr *)&localAddress、sizeof (localAddress);
如果(status!= 0)
{
中断;
}
system_printf ("绑定套接字成功。\n");
system_flush();
// TODO -将 maxcon 参数更改为常量
Status = Listen (serverListenSocket、3);
如果(status!= 0)
{
中断;
}
system_printf ("Listen socket success.\n");
system_flush();
// TODO -接受来自远程主机的连接
ClientSocket = Accept (serverListenSocket、(struct sockaddr *)&clientAddress、&clientAddressLen);
if (ClientSocket ==(int) invalid_socket)
{
中断;
}
system_printf ("接受套接字成功。\n");
system_flush();
配置文件的 IP 地址部分:

