2015年5月8日金曜日

開発環境

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 コメント:

コメントを投稿