#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. 编译使用tinyxml

    环境: win7 32位旗舰版,VS2010,tinyxml_2_6_2版本 1.下载tinyxml,并解压到tinyxml文件夹下 2.生成动态链接库 原生的Tinyxml只支持静态库(没有在.h文 ...

  2. linux的学习系列 1---简介

    Linux简介 严格的来讲,Linux 不算是一个操作系统,只是一个 Linux 系统中的内核,即计算机软件与硬件通讯之间的平台:Linux的全称是GNU/Linux,这才算是一个真正意义上的Linu ...

  3. UIImageView 的contentMode属性 浅析

    UIImageView 的contentMode这个属性是用来设置图片的显示方式,如居中.居右,是否缩放等,有以下几个常量可供设定:UIViewContentModeScaleToFillUIView ...

  4. AI 人工智能 探索 (十)

    呼叫事件图形结构如下 蓝色代表 警察局 红色代表警察 黄色代表 死亡人 蓝色球代表呼救人 黑色代表 敌人 警察目标是 攻击 黑色人,但 路中 会碰到 黄色人,如果警察有 救人功能 则会先救人去医院再看 ...

  5. 2017 ZSTU寒假排位赛 #1

    题目链接:https://vjudge.net/contest/147102#overview. A题:给出一堆的点,要找出两条垂直的直线,一条与x轴呈45度.-->使得所有的点到任意一条直线的 ...

  6. python socket编程---从使用Python开发一个Socket示例说到开发者的思维和习惯问题

    今天主要说的是一个开发者的思维和习惯问题. 思维包括编程的思维和解决一个具体问题的分析思维,分析思路,分析方法,甚至是分析工具. 无论是好习惯还是不好的习惯,都是在者一天一天的思维中形成的.那些不好的 ...

  7. jq的事件冒泡

    在页面上可以有多个事件,也可以多个元素响应同一件事, 事件冒泡引发的问题: 有些时候不想动用的事件,却因为事件冒泡而触发 解决问题: 1.事件对象 由于IE-DOM和标准的DOM实现事件对象的方法各不 ...

  8. Genymotion开启就全部白屏解决方法

    Genymotion开启就整个界面全部白屏,包括菜单栏也白屏,解决方法: 很可能是显卡驱动有问题,用驱动人生或者驱动精灵更新显卡驱动就可以了. 目前开发者好用的模拟器有: 1.Genymotion 2 ...

  9. php获取Linux网卡信息

    $data = exec("/sbin/ifconfig"); var_dump($data); 注意:有时候这种方式获取不到,应该是权限问题 在/var/rootP文件中添加ro ...

  10. 一个java解析xml的简单例子

    java解析xml,主要是通过Dom4j实现的,很多场合都会用到此功能,需要解析XML文件. 下面是一个简单的解析XML文件的例子: import java.util.Iterator; import ...