专栏中心

EEPW首页 > 专栏 > Socket send and recv

Socket send and recv

发布人:电子禅石 时间:2019-06-01 来源:工程师 发布文章
char message[]= "hello rt-thread server!";
#define BUFSZ  1024
void tcpclient(void)
{
    int ret;
    char *recv_data;
    struct hostent *host;
    int sock,bytes_recived;
    struct sockaddr_in server_addr;
    char url[] = "192.168.1.45";
    int port = 5000;
    host = gethostbyname(url);
    recv_data = rt_malloc(BUFSZ);
    sock = socket(AF_INET, SOCK_STREAM, 0);
    if(sock < 0)
    {
        rt_kprintf("sock create failed");
    }
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(port);
    server_addr.sin_addr = *((struct in_addr *)host->h_addr);
    if(connect(sock,(struct sockaddr *)&server_addr,sizeof(struct sockaddr)) == -1)
    {
        rt_kprintf("connect fail !\n");
        closesocket(sock);
        return;
    }
    else
    {
        rt_kprintf("connect successful\n");
        send(sock,message,sizeof(message),0);
    }
    
    while(1)
    {
     bytes_recived = recv(sock,recv_data,BUFSZ -1,0);
     if(bytes_recived < 0)
     {
        closesocket(sock);
        rt_kprintf("\nreceived error,close the socket.\r\n");
        rt_free(recv_data);
        break;
     }
     else if(bytes_recived == 0)
     {
        closesocket(sock);
        rt_kprintf("\n received error,close the socket .\r\n");
        rt_free(recv_data);
        break;
     }
     recv_data[bytes_received] = '\0';
     if(strncmp(recv_data,"q",1) == 0 || strncmp(recv_data,"Q",1))
     {
        closesocket(sock);
        rt_kprintf("\n got a 'q' or 'Q',close the socket.\r\n“);
        rt_free(recv_data);
        break;
     }
     else
     {
        rt_kprintf("\n Received data = %s ",recv_data);
     }
     ret =send(sock, send_data, strlen(send_data), 0);
     if(ret < 0)
     {
        closesocket(sock);
        rt_kprintf("\n send error,close the socket.\r\n");
        rt_free(recv_data);
        break;
     }
     else if (ret == 0)
     {
        rt_kprintf("send warning ,send function return \r\n");
     }
    }
    
    
}


专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

尼得科OKK将发售卧式5轴加工中心“HX500”

多路报警器电路

BQ3060:符合 SBS 1.1 的电量监测计和保护器

视频 2010-01-13

是的,英特尔应该私有

南芯科技车规PMIC家族再添新成员,发布ASIL-D功能安全等级的SBC

ZC-2-10A自动充电机电路

Altium Designer概述 下

视频 2010-01-13

单电源运放图集

联发科天玑9500:旨在超越Snapdragon 8 Gen 3和苹果A17

Nvidia和Wayve谈论5亿美元投资

汽车电子 2025-09-23

2025迎人形机器人量产拐点 兆易创新全栈芯片已就位

红外专用放大电路BISS0001微功耗芯片

ARM7控制的LCD

hljxy 2004-09-12

Altium Designer概述 上

视频 2010-01-13

LCD抗干扰

hljxy 2004-09-12

用于消费电子产品的ispMACH 4000ZE CPLD系列

视频 2010-01-13

晶体管放大器

元件/连接器 2025-09-23

TI DC/DC 转换器TPS54620 简单易用的负载点设计

视频 2010-01-13

2025 LoRa创新论坛圆满落幕,物联网新时代正式开启

为什么与台积电共创对日本企业来说是一个千载难逢的机会

EDA/PCB 2025-09-23

减轻多小芯片系统中的翘曲

电路设计[FPGA]设计经验

更多 培训课堂
更多 焦点
更多 视频

技术专区