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 = ;
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方式发数据的更多相关文章
- Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
转载地址:http://blog.csdn.net/mad1989/article/details/9147661 ZERO.前言 有关通信原理内容是在网上或百科整理得到,代码部分为本人所写,如果不当 ...
- Nginx学习笔记(四) 源码分析&socket/UDP/shmem
源码分析 在茫茫的源码中,看到了几个好像挺熟悉的名字(socket/UDP/shmem).那就来看看这个文件吧!从简单的开始~~~ src/os/unix/Ngx_socket.h&Ngx_s ...
- udp协议的数据接收与发送的代码
我想基于lwIP协议中的UDP协议,用单片机做一个服务器,接受电脑的指令然后返回数据.以下是我的代码 /************************************************ ...
- 消息队列、socket(UDP)实现简易聊天系统
前言: 最近在学进程间通信,所以做了一个小项目练习一下.主要用消息队列和socket(UDP)实现这个系统,并数据库存储数据,对C语言操作数据库不熟悉的可以参照我的这篇博客:https://www.c ...
- python 网络编程 TCP/IP socket UDP
TCP/IP简介 虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Micro ...
- UDP收/发广播包原理及步骤
原文链接地址:http://www.2cto.com/net/201311/254834.html UDP收/发广播包原理及步骤 如果网络中两个主机上的应用程序要相互通信,其一要知道彼此的IP,其二要 ...
- 重新想象 Windows 8 Store Apps (62) - 通信: Socket TCP, Socket UDP
[源码下载] 重新想象 Windows 8 Store Apps (62) - 通信: Socket TCP, Socket UDP 作者:webabcd 介绍重新想象 Windows 8 Store ...
- Android(java)学习笔记80:UDP协议发送数据
UDP协议发送数据:我们总是先运行接收端,再运行发送端发送端: 1 package cn.itcast_02; import java.io.IOException; import java.net. ...
- Java基础知识强化之网络编程笔记03:UDP之UDP协议发送数据 和 接收数据
1. UDP协议发送数据 和 接收数据 UDP协议发送数据: • 创建发送端的Socket对象 • 创建数据,并把数据打包 • 调用Socket对象的发送方法,发送数据包 • 释放资源 UDP协议接 ...
随机推荐
- Log4J积累
1.常用级别,从低到高:DEBUG<INFO<WARN<ERROR 2.程序会打印比设置的级别高的日志信息(包括当前设置的日志级别).设置的级别越高,打印的日志信息越少. 3.if ...
- robot framework -记录关键字
1.set value if (当条件满足时,进行变量赋值) 2.focus (将焦点定在制定的元素) 3.win close +title(关闭制定title) 4.get list items ...
- android cts 命令的说明
Host help showthis message 帮助文档 exit exitcts command line 退出CTS ls 全部用l替代,--plan直接用p替代,也即 l p .其他类似 ...
- HDU 5833 (2016大学生网络预选赛) Zhu and 772002(高斯消元求齐次方程的秩)
网络预选赛的题目……比赛的时候没有做上,确实是没啥思路,只知道肯定是整数分解,然后乘起来素数的幂肯定是偶数,然后就不知道该怎么办了… 最后题目要求输出方案数,首先根据题目应该能写出如下齐次方程(从别人 ...
- vbs打包exe工具
工具下载:http://yunpan.cn/cceRRbszUt5MC 访问密码 66e2
- POJ - 2336 Wireless Network
Description An earthquake takes place in Southeast Asia. The ACM (Asia Cooperated Medical team) have ...
- Excel工作表 表名导出
Technorati 标签: microsoft office,vbs,excel 1: Attribute VB_Name = "表名导出" 2: Sub test() 3: ...
- DedeCMS中实现在顶层banner中显示自定义登录信息
一.需求描述 dedeCMS自带的模板中有互动中心模块,如下图所示: 由于会员登陆对我来说不是网站的重要模块且默认DedeCMS的会员中心模块的初始化很慢,常会显示“正在载入中,请稍候...”, 所以 ...
- spring MVC之返回JSON数据(Spring3.0 MVC)
方式一:使用ModelAndView的contentType是"application/json" 方式二:返回String的 contentType是&qu ...
- zf-关于业务量图表没有出现统计柱形图问题
是实现类里的 objs[0] = ht.get("BUS_NAME");objs[1] = ht.get("NUM"); 这个写成小写了 改成大写即可,原来这个 ...