C socket udp方式发数据
#define HOST_SERVER_IP "192.168.3.35" #define HOST_PORT 9501 #define SLEEP_TIME 1 #define LOOP_TIME 3 #define DATA_SIZE 80 int judge_socket_exist() { int loop_time = 0; fd_set send_data_flag; static int socket_fd = -1; while(1) { if (socket_fd <= 0) { socket_fd = socket(AF_INET, SOCK_DGRAM, 0); loop_time++; } if (socket_fd > 0) { FD_ZERO(&send_data_flag); FD_SET(socket_fd, &send_data_flag); FD_SET(0, &send_data_flag); //check socket is effective if (select(socket_fd+1, NULL, &send_data_flag, NULL, 0) > 0) { break; } else { socket_fd = socket(AF_INET, SOCK_DGRAM, 0); loop_time++; } } if (loop_time > LOOP_TIME) { return -1; } sleep(SLEEP_TIME); } return socket_fd; } int gsh_post_client(const char* sn, const char* ip) { if (NULL == sn || NULL == ip) { return -1; } int loop_time = 0; //loop time of fail execute int send_data_length = 0; //length of sending data int select_err = -1; //flag of select function back value int socket_fd = judge_socket_exist(); //set socket flag, socket not close struct timeval select_wait = {1, 0}; //select function wait time char text[BUFSIZ]; char send_data_buffer[DATA_SIZE]; //buffer of sending data struct sockaddr_in socket_addr; //socket address of server ip and port fd_set send_data_flag; //select function send data flag if (socket_fd <= 0) { fprintf(stderr, "establish socket fail"); return -1; } //initialize socket data bzero(&socket_addr, sizeof(socket_addr)); socket_addr.sin_family = AF_INET; socket_addr.sin_port = htons(HOST_PORT); inet_aton(HOST_SERVER_IP, &socket_addr.sin_addr); //initialize request data memset(&send_data_buffer, 0, sizeof(send_data_buffer)); strcat(send_data_buffer, "sn="); strcat(send_data_buffer, sn); strcat(send_data_buffer, "&ip="); strcat(send_data_buffer, ip); while(1) //for no-blocking { if (loop_time > LOOP_TIME) { fprintf(stderr, "send data fail\n"); return -1; } FD_ZERO(&send_data_flag); FD_SET(socket_fd, &send_data_flag); FD_SET(0, &send_data_flag); select_err = select(socket_fd+1, NULL, &send_data_flag, NULL, &select_wait); if (select_err <= 0) { loop_time++; } else { if (FD_ISSET(socket_fd, &send_data_flag)) { loop_time = 0; FD_CLR(socket_fd, &send_data_flag); while(send_data_length < strlen(send_data_buffer)) { send_data_length = sendto(socket_fd, send_data_buffer, strlen(send_data_buffer), 0, (struct sockaddr *)&socket_addr, sizeof(socket_addr)); if (send_data_length <= 0) { fprintf(stderr, "sending data fail\n"); return -1; } if (loop_time > LOOP_TIME) { fprintf(stderr, "length of sending data shorten than data\n"); return -1; } if (send_data_length < strlen(send_data_buffer)) { loop_time++; sleep(SLEEP_TIME); } }
recvfrom(socket_fd,text,sizeof(text), 0 , NULL, NULL); printf("%s", text);
break; } else { loop_time++; } } sleep(SLEEP_TIME); } return 0; }
you are the best!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现