使用smart360的API - C语言
来源:互联网 发布:淘宝一口价能随便改吗 编辑:程序博客网 时间:2024/05/16 03:59
#include <stdlib.h>
#include <sys/types.h>
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <unistd.h>
#define CMD_JOIN 0x01 /*连接结点*/
#define CMD_DATA 0x02 /*传输数据*/
#define CMD_REDIRECT 0x03 /*连接转向*/
#define CMD_ERROR 0xFE /*错误(回应)*/
#define CMD_OK 0xFC /*正确(回应)*/
#define DEV_SEND 0x01 /*发射器*/
#define DEV_RECV 0x02 /*接收器*/
/*获取appid所在的服务器*/
int get_port(char svrip[], int svrport, char dev, char appid[], char *ip, int *port)
{
int sock_fd = 0;
int i = 0;
int recbytes =0;
char buf[1024] = {0};
struct sockaddr_in s_add, c_add;
sock_fd = socket ( AF_INET, SOCK_STREAM, 0 );
if ( -1 == sock_fd )
{
return -1;
}
bzero ( &s_add,sizeof ( struct sockaddr_in ) );
s_add.sin_family = AF_INET;
s_add.sin_addr.s_addr = inet_addr (svrip);
s_add.sin_port = htons ( svrport );
if ( -1 == connect ( sock_fd, ( struct sockaddr * ) ( &s_add ), sizeof ( struct sockaddr ) ) )
{
return -1;
}
/*构造包,申请连接appid*/
buf[0] = CMD_JOIN; /*命令字*/
buf[1] = dev; /*设备类型*/
strcpy(buf + 2, appid);
write(sock_fd, buf, 18);
if ( -1 == ( recbytes = read ( sock_fd, buf, 1024 ) ) )
{
return -1;
}
buf[recbytes] = '\0';
/*服务器收到申请后,会找一台与客户端最近的连接机,并返回其ip与port*/
if(buf[0] == CMD_REDIRECT)
{
for (i = 0; i < recbytes - 1; i++)
{
if (buf[i+1] == '_')
{
ip[i] = '\0';
break;
}
else
{
ip[i] = buf[i+1];
}
}
*port = atoi(buf+2+i);
}
else
{
return -1;
}
return 0;
}
/*发送数据到appid上*/
int send_data(char svrip[], int svrport, char appid[])
{
int sock_fd = 0;
int i = 0;
int recbytes = 0;
char buf[1024] = {0};
struct sockaddr_in s_add, c_add;
sock_fd = socket ( AF_INET, SOCK_STREAM, 0 );
if ( -1 == sock_fd )
{
return -1;
}
bzero ( &s_add,sizeof ( struct sockaddr_in ) );
s_add.sin_family = AF_INET;
s_add.sin_addr.s_addr = inet_addr (svrip);
s_add.sin_port = htons ( svrport );
if ( -1 == connect ( sock_fd, ( struct sockaddr * ) ( &s_add ), sizeof ( struct sockaddr ) ) )
{
return -1;
}
/*构造包,申请连接appid*/
buf[0] = CMD_JOIN; /*命令字*/
buf[1] = DEV_SEND; /*发送型设备*/
strcpy(buf + 2, appid);
write(sock_fd, buf, 18);
if ( -1 == ( recbytes = read ( sock_fd, buf, 1024 ) ) )
{
return -1;
}
/*收到加入appid包之后,服务器返回CMD_OK状态*/
if((unsigned char)buf[0] == CMD_OK)
{
while (1)
{
/*不断向服务器发送一个随机数*/
buf[0] = CMD_DATA;
sprintf(buf + 1, "%d\n", rand());
write(sock_fd, buf, strlen(buf));
if ( -1 == ( recbytes = read ( sock_fd, buf, 1024 ) ) )
{
return -1;
}
if((unsigned char)buf[0] != CMD_OK)
{
return -1;
}
sleep(1);
}
}
return 0;
}
int main(int argc,char *argv[])
{
char *master_ip = argv[1]; /*服务器ip*/
int master_port = 5615; /*服务器port*/
char *appid = argv[2]; /*APPID*/
char slaver_ip[100] = {0};
int slaver_port = 0;
get_port(master_ip, master_port, DEV_SEND, appid, slaver_ip, &slaver_port);
printf("slaver: %s %d\r\n", slaver_ip, slaver_port);
send_data(slaver_ip, slaver_port, appid);
return 0;
}
#include <stdlib.h>
#include <sys/types.h>
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <unistd.h>
#define CMD_JOIN 0x01 /*连接结点*/
#define CMD_DATA 0x02 /*传输数据*/
#define CMD_REDIRECT 0x03 /*连接转向*/
#define CMD_ERROR 0xFE /*错误(回应)*/
#define CMD_OK 0xFC /*正确(回应)*/
#define DEV_SEND 0x01 /*发射器*/
#define DEV_RECV 0x02 /*接收器*/
/*获取appid所在的服务器*/
int get_port(char svrip[], int svrport, char dev, char appid[], char *ip, int *port)
{
int sock_fd = 0;
int i = 0;
int recbytes =0;
char buf[1024] = {0};
struct sockaddr_in s_add, c_add;
sock_fd = socket ( AF_INET, SOCK_STREAM, 0 );
if ( -1 == sock_fd )
{
return -1;
}
bzero ( &s_add,sizeof ( struct sockaddr_in ) );
s_add.sin_family = AF_INET;
s_add.sin_addr.s_addr = inet_addr (svrip);
s_add.sin_port = htons ( svrport );
if ( -1 == connect ( sock_fd, ( struct sockaddr * ) ( &s_add ), sizeof ( struct sockaddr ) ) )
{
return -1;
}
/*构造包,申请连接appid*/
buf[0] = CMD_JOIN; /*命令字*/
buf[1] = dev; /*设备类型*/
strcpy(buf + 2, appid);
write(sock_fd, buf, 18);
if ( -1 == ( recbytes = read ( sock_fd, buf, 1024 ) ) )
{
return -1;
}
buf[recbytes] = '\0';
/*服务器收到申请后,会找一台与客户端最近的连接机,并返回其ip与port*/
if(buf[0] == CMD_REDIRECT)
{
for (i = 0; i < recbytes - 1; i++)
{
if (buf[i+1] == '_')
{
ip[i] = '\0';
break;
}
else
{
ip[i] = buf[i+1];
}
}
*port = atoi(buf+2+i);
}
else
{
return -1;
}
return 0;
}
/*从appid中接收数据*/
int recv_data(char svrip[], int svrport, char appid[])
{
int sock_fd = 0;
int i = 0;
int recbytes = 0;
char buf[1024] = {0};
struct sockaddr_in s_add, c_add;
sock_fd = socket ( AF_INET, SOCK_STREAM, 0 );
if ( -1 == sock_fd )
{
return -1;
}
bzero ( &s_add,sizeof ( struct sockaddr_in ) );
s_add.sin_family = AF_INET;
s_add.sin_addr.s_addr = inet_addr (svrip);
s_add.sin_port = htons ( svrport );
if ( -1 == connect ( sock_fd, ( struct sockaddr * ) ( &s_add ), sizeof ( struct sockaddr ) ) )
{
return -1;
}
/*构造包,申请连接appid*/
buf[0] = CMD_JOIN; /*命令字*/
buf[1] = DEV_RECV; /*接收类型设备*/
strcpy(buf + 2, appid);
write(sock_fd, buf, 18);
if ( -1 == ( recbytes = read ( sock_fd, buf, 1024 ) ) )
{
return -1;
}
/*收到加入appid包之后,服务器返回CMD_OK状态*/
if((unsigned char)buf[0] == CMD_OK)
{
while (1)
{
/*循环接收数据*/
if ( -1 == ( recbytes = read ( sock_fd, buf, 1024 ) ) )
{
return -1;
}
buf[recbytes] = '\0';
printf("%s", buf);
}
}
return 0;
}
int main(int argc,char *argv[])
{
char *master_ip = argv[1]; /*服务器ip*/
int master_port = 5615; /*服务器port*/
char *appid = argv[2]; /*APPID*/
char slaver_ip[100] = {0};
int slaver_port = 0;
get_port(master_ip, master_port, DEV_RECV, appid, slaver_ip, &slaver_port);
printf("slaver: %s %d\r\n", slaver_ip, slaver_port);
recv_data(slaver_ip, slaver_port, appid);
return 0;
}
- 使用smart360的API - C语言
- smart360.net的api使用 - python
- smart360使用API - java
- 在C语言中使用正则表达式的几个API
- linux下使用mysql的C语言API
- OpenWRT UCI API的使用——C语言
- Mysql的C语言API接口在项目中的使用
- MySQL的C语言API
- C语言使用windows api实现多线程
- 与C语言API的关系
- c语言的字符操作API参考手册
- MySQL的C语言API接口
- MySQL的C语言API接口
- MYSQL 语言C API的常用函数
- MySQL的C语言API功能介绍
- mysql c api的使用
- mysql C API的使用
- C语言“#”的使用
- 跳过登陆窗体的一种思路
- 华为公司2014届校园招聘软件类上机考试样题
- [东南大学][C++][何洁月]教程内容:
- Java获取客户端真实IP地址的两种方法
- windows下mysql 不能显示中文
- 使用smart360的API - C语言
- lsof命令 详解
- 初学者如何学习BI
- Java环境变量
- javascript dom学习笔记
- Hibernate延迟加载机制 .
- Spring基于注解的缓存配置--web应用实例
- ARP简单介绍
- POJ 1192 最优连通子集