#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 = ;
fd_set send_data_flag;
static int socket_fd = -; while()
{
if (socket_fd <= )
{
socket_fd = socket(AF_INET, SOCK_DGRAM, );
loop_time++;
} if (socket_fd > )
{
FD_ZERO(&send_data_flag);
FD_SET(socket_fd, &send_data_flag);
FD_SET(, &send_data_flag); //check socket is effective
if (select(socket_fd+, NULL, &send_data_flag, NULL, ) > )
{
break;
}
else
{
socket_fd = socket(AF_INET, SOCK_DGRAM, );
loop_time++;
}
} if (loop_time > LOOP_TIME)
{
return -;
} sleep(SLEEP_TIME);
} return socket_fd;
} int gsh_post_client(const char* sn, const char* ip)
{
if (NULL == sn || NULL == ip)
{
return -;
} int loop_time = ; //loop time of fail execute
int send_data_length = ; //length of sending data
int select_err = -; //flag of select function back value
int socket_fd = judge_socket_exist(); //set socket flag, socket not close
struct timeval select_wait = {, }; //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 <= )
{
fprintf(stderr, "establish socket fail");
return -;
} //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, , 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() //for no-blocking
{
if (loop_time > LOOP_TIME)
{
fprintf(stderr, "send data fail\n");
return -;
} FD_ZERO(&send_data_flag);
FD_SET(socket_fd, &send_data_flag);
FD_SET(, &send_data_flag); select_err = select(socket_fd+, NULL, &send_data_flag, NULL, &select_wait); if (select_err <= )
{
loop_time++;
}
else
{
if (FD_ISSET(socket_fd, &send_data_flag))
{
loop_time = ;
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), , (struct sockaddr *)&socket_addr, sizeof(socket_addr)); if (send_data_length <= )
{
fprintf(stderr, "sending data fail\n");
return -;
} if (loop_time > LOOP_TIME)
{
fprintf(stderr, "length of sending data shorten than data\n");
return -;
} if (send_data_length < strlen(send_data_buffer))
{
loop_time++;
sleep(SLEEP_TIME);
}
}
recvfrom(socket_fd,text,sizeof(text), , NULL, NULL);
printf("%s", text);
break;
}
else
{
loop_time++;
}
} sleep(SLEEP_TIME);
} return ;
}

C socket udp方式发数据的更多相关文章

  1. Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)

    转载地址:http://blog.csdn.net/mad1989/article/details/9147661 ZERO.前言 有关通信原理内容是在网上或百科整理得到,代码部分为本人所写,如果不当 ...

  2. Nginx学习笔记(四) 源码分析&socket/UDP/shmem

    源码分析 在茫茫的源码中,看到了几个好像挺熟悉的名字(socket/UDP/shmem).那就来看看这个文件吧!从简单的开始~~~ src/os/unix/Ngx_socket.h&Ngx_s ...

  3. udp协议的数据接收与发送的代码

    我想基于lwIP协议中的UDP协议,用单片机做一个服务器,接受电脑的指令然后返回数据.以下是我的代码 /************************************************ ...

  4. 消息队列、socket(UDP)实现简易聊天系统

    前言: 最近在学进程间通信,所以做了一个小项目练习一下.主要用消息队列和socket(UDP)实现这个系统,并数据库存储数据,对C语言操作数据库不熟悉的可以参照我的这篇博客:https://www.c ...

  5. python 网络编程 TCP/IP socket UDP

    TCP/IP简介 虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Micro ...

  6. UDP收/发广播包原理及步骤

    原文链接地址:http://www.2cto.com/net/201311/254834.html UDP收/发广播包原理及步骤 如果网络中两个主机上的应用程序要相互通信,其一要知道彼此的IP,其二要 ...

  7. 重新想象 Windows 8 Store Apps (62) - 通信: Socket TCP, Socket UDP

    [源码下载] 重新想象 Windows 8 Store Apps (62) - 通信: Socket TCP, Socket UDP 作者:webabcd 介绍重新想象 Windows 8 Store ...

  8. Android(java)学习笔记80:UDP协议发送数据

    UDP协议发送数据:我们总是先运行接收端,再运行发送端发送端: 1 package cn.itcast_02; import java.io.IOException; import java.net. ...

  9. Java基础知识强化之网络编程笔记03:UDP之UDP协议发送数据 和 接收数据

    1. UDP协议发送数据 和 接收数据 UDP协议发送数据: • 创建发送端的Socket对象 • 创建数据,并把数据打包 • 调用Socket对象的发送方法,发送数据包 • 释放资源  UDP协议接 ...

随机推荐

  1. PID控制学习笔记(一)

    比例控制往往会存在稳态误差(该结论适用于0型对象) 由比例度的定义和意义,比例增益Kc越大,即直线的斜率越大,则,越快达到平衡,稳态误差越小,因此在保证系统相对稳定性一定的条件下,总是希望比例增益越大 ...

  2. JAVA-面向对象2--继承

    1. 继承的好处: 1.提高代码复用性. 2.让类与类之间产生关系,为面向对象的第三大特征 多态 提供了前提 2.java中支持单继承,不直接支持多继承,但对c++中多继承进行了改良.java通过多实 ...

  3. mysql 数字字段的类型选择

    bigint            从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字).存储大小为 8  ...

  4. as3 组件定义

    package kingBook{ import flash.display.MovieClip; import flash.events.Event; import flash.utils.setT ...

  5. linux无法解析主机地址(could not resolve host)解决办法

    修改/etc/hosts文件: ip地址 域名 例:192.30.253.120 codeload.github.com

  6. 凹凸曼的修改zencart 程序(经典!)

    ==================================================================================================== ...

  7. java文件处理之压缩,分割

    http://blog.csdn.net/ycg01/article/details/1366648 java文件处理之压缩,分割 标签: javaexceptionimportnullbytefil ...

  8. VIJOS P1647 不差钱 SBT

    [描述] 同学们一起看了小品<不差钱>,LX神突发奇想,想刁难一下十八居士,他让十八居士模拟一下点菜的过程. [输入格式] 输入第一行为一个数price,表示价钱大于price的菜赵本山都 ...

  9. git 使用系列(一)—— git stash 的使用

    1. git 放弃本地修改 git checkout . #本地所有修改的.没有的提交的,都返回到原来的状态 git stash #把所有没有提交的修改暂存到stash里面.可用git stash p ...

  10. How to spend you day ?

    如果这是你生命中的最后的一天,你该如何去过好它呢? 不要浪费你生命中的每一分,每一秒!!!