105 lines
3.0 KiB
C
105 lines
3.0 KiB
C
/*****************************************************************************
|
||
* Copyright: 2016-2026, Ieucd Tech. Co., Ltd.
|
||
* File name: server.c
|
||
* Description: 用于实现zmq多线程收发结构体消息的通信框架。
|
||
* Author: TLSong
|
||
* Version: V0.0.1
|
||
* Date: 2020/7/7
|
||
* History:
|
||
* 2020/7/7 创建文件。
|
||
* *****************************************************************************/
|
||
|
||
#include <zmq.h>
|
||
#include <string.h>
|
||
#include <stdio.h>
|
||
#include <unistd.h>
|
||
#include <assert.h>
|
||
#include <float.h>
|
||
#include <limits.h>
|
||
#include <pthread.h>
|
||
#include "data_mode.h"
|
||
|
||
void *value_server(void *args)
|
||
{
|
||
Msg max_msg = {INT_MAX, CHAR_MAX, SHRT_MAX, LONG_MAX, FLT_MAX, DBL_MAX, "Hello Max Value!"};
|
||
Msg min_msg = {INT_MIN, CHAR_MIN, SHRT_MIN, LONG_MIN, FLT_MIN, DBL_MIN, "Hello Min Value!"};
|
||
Msg random_msg = {233, 'h', 244, 255, 0.01, 0.0001, "Hello Random Value!"};
|
||
|
||
|
||
// Socket to talk to clients
|
||
void *context = zmq_ctx_new ();
|
||
void *responder = zmq_socket (context, ZMQ_REP);
|
||
int rc = zmq_bind (responder, "tcp://*:5555");
|
||
assert (rc == 0);
|
||
|
||
while (1) {
|
||
char buffer [10];
|
||
zmq_recv (responder, buffer, 10, 0);
|
||
printf ("Received: %s\n",buffer);
|
||
sleep (1); // Do some 'work'
|
||
Msg send_msg;
|
||
if(strcmp(buffer,"MAX")==0)
|
||
send_msg = max_msg;
|
||
else if(strcmp(buffer,"MIN")==0)
|
||
send_msg = min_msg;
|
||
else
|
||
send_msg = random_msg;
|
||
zmq_send (responder, &send_msg, sizeof(send_msg), 0);
|
||
printf ("Sned message: \n");
|
||
printf ("---------------start---------------\n");
|
||
printf ("int: %d\n",send_msg.Int);
|
||
printf ("char: %c\n",send_msg.Char);
|
||
printf ("short: %hd\n",send_msg.Short);
|
||
printf ("long: %ld\n",send_msg.Long);
|
||
printf ("float: %d\n",send_msg.Float);
|
||
printf ("double: %d\n",send_msg.Double);
|
||
printf ("String: %s\n",send_msg.String);
|
||
printf ("--------------- end ---------------\n");
|
||
|
||
}
|
||
|
||
}
|
||
|
||
void *sub_weather(void *args)
|
||
{
|
||
void* context = zmq_ctx_new();
|
||
assert(context != NULL);
|
||
|
||
void* subscriber = zmq_socket(context, ZMQ_SUB);
|
||
assert(subscriber != NULL);
|
||
|
||
int ret = zmq_connect(subscriber, "tcp://localhost:5556");
|
||
assert(ret == 0);
|
||
|
||
ret = zmq_setsockopt(subscriber, ZMQ_SUBSCRIBE, "", 0);
|
||
assert(ret == 0);
|
||
|
||
while(1)
|
||
{
|
||
printf("into while\n");
|
||
char szBuf[1024] = {0};
|
||
ret = zmq_recv(subscriber, szBuf, sizeof(szBuf) - 1, 0);
|
||
if (ret > 0)
|
||
{
|
||
printf("%s\n", szBuf);
|
||
}
|
||
}
|
||
|
||
zmq_close(subscriber);
|
||
zmq_ctx_destroy(context);
|
||
}
|
||
|
||
int main (void)
|
||
{
|
||
int value_ret, sub_weather_ret;
|
||
pthread_t value_pth, sub_weather_pth; //线程ID变量
|
||
// 参数:创建的线程ID,线程参数,调用函数,函数参数
|
||
value_ret = pthread_create(&value_pth,NULL,value_server,NULL);
|
||
sub_weather_ret = pthread_create(&sub_weather_pth,NULL,sub_weather,NULL);
|
||
|
||
pthread_join(value_pth,NULL); // 等待线程结束
|
||
//pthread_join(sub_weather_pth.NULL);
|
||
|
||
return 0;
|
||
}
|