開発環境
- OS X Yosemite - Apple (OS)
- Emacs (CUI)、BBEdit - Bare Bones Software, Inc. (GUI) (Text Editor)
- C (プログラミング言語)
- LLVM/Clang (コンパイラ, Xcode - Apple)
Introducing Python: Modern Computing in Simple Packages(Bill Lubanovic (著)、 O'Reilly Media)のChapter 11(Concurrency and Networks)、Things to Do 11.2.をC言語で考えてみる。
Things to Do 11.2.
コード(Emacs, BBEdit)
server
#include "zhelpers.h"
#include <stdlib.h>
int main() {
void *context = zmq_ctx_new();
void *responder = zmq_socket(context, ZMQ_REP);
zmq_bind(responder, "tcp://*:5555");
while (1) {
char *s = s_recv(responder);
printf("received %s\n", s);
char *send_str;
if (strcmp(s, "time") == 0) {
time_t t;
time (&t);
send_str = asctime(localtime(&t));
}
else
send_str = "...";
free(s);
s_send(responder, send_str);
}
zmq_close(responder);
zmq_ctx_destroy(context);
}
client
#include "zhelpers.h"
int main() {
void *context = zmq_ctx_new();
void *requester = zmq_socket(context, ZMQ_REQ);
zmq_connect(requester, "tcp://localhost:5555");
while (1) {
char msg[255];
fgets(msg, sizeof(msg), stdin);
if (msg[0] == 'q') break;
msg[strlen(msg) - 1] = '\0';
printf("send '%s'\n", msg);
s_send(requester, msg);
char *s = s_recv(requester);
printf("%s\n", s);
}
zmq_close(requester);
zmq_ctx_destroy(context);
}
入出力結果(Terminal)
server
$ ./server received time received Hello received time C-c C-c $
client
$ ./client time send 'time' Fri May 8 17:23:26 2015 Hello send 'Hello' ... time send 'time' Fri May 8 17:23:34 2015 q $
0 コメント:
コメントを投稿