|
使用RL-TCPnet 之 BSD Socket 客户端的代码修改而来,原来是TCP,现改为UDP,代码如下,连接远程服务器能够成功,可是接收函数却提示无效的socket号,不知道是什么原因
{
// int len;
int sock, res;
uint8_t ip[4];
SOCKADDR_IN addr;
char rBuf[128];
while (1)
{
/* 创建一个socket
第1个参数AF_INET:当前仅支持这个类型的地址族。
第2个参数SOCK_DGRAM:表示数据流通信类型,即使用的UDP。
第3个参数0 :配置为0的话,自动跟第2个参数进行协议匹配,这里就是UDP协议。
*/
sock = socket (AF_INET, SOCK_DGRAM, 0);
/* 端口号设置为1001 */
addr.sin_port = htons(atoi((char *)para_t.port3));
/* 与函数socket中的AF_INET作用一样 */
addr.sin_family = PF_INET;
bps_user_lib_ip_asc_int(ip, para_t.ip3, strlen((char *)para_t.ip3)) ;
addr.sin_addr.s_b1 = ip[0];
addr.sin_addr.s_b2 = ip[1];
addr.sin_addr.s_b3 = ip[2];
addr.sin_addr.s_b4 = ip[3];
/* 客户端连接远程服务器,如果远程服务器还未创建,此函数会立即返回 */
res = connect (sock, (SOCKADDR *)&addr, sizeof (addr));
printf("客户端连接远程服务器状态%s\r\n", ReVal_Table[abs(res)]);
while (1)
{
res = recv (sock, rBuf, sizeof(rBuf), 0);
if (res > 0)
{
bsp_user_lib_printf_hex("net",(uint8_t *)rBuf,res);
res = send (sock, (char *)rBuf, res, 0);
if (res < 0)
{
printf("函数send发送数据失败%s\r\n", ReVal_Table[abs(res)]);
}
else
{
printf("函数send成功发送数据 = %d字节\r\n", res);
}
}
else
{
if((res == SCK_EINVALID) || (res == SCK_ECLOSED))
{
printf("客户端:%d 接收函数返回状态%s\r\n", sock,ReVal_Table[abs(res)]);
break;
}
}
}
/*
远程服务器断开连接和sock句柄无效,程序都会执行到这里,我们在这里关闭socket,
程序返回到第一个大while循环的开头重新创建socket并连接。
*/
closesocket (sock);
os_dly_wait(30000);
}
}
|
|