質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ソケット

TCP/IPにおいて、IPアドレスとサブアドレスであるポート番号を組み合わせたネットワークアドレスのことを呼びます。また、ソフトウェアアプリケーションにおいて、TCP/IP通信を行う為の仮想的なインターフェースという意味もある。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

887閲覧

zmqとsocketの併用について

JJJHHH

総合スコア11

ソケット

TCP/IPにおいて、IPアドレスとサブアドレスであるポート番号を組み合わせたネットワークアドレスのことを呼びます。また、ソフトウェアアプリケーションにおいて、TCP/IP通信を行う為の仮想的なインターフェースという意味もある。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/10/28 14:39

前提・実現したいこと

zmqsocketの併用はできるかどうかについて

発生している問題・エラーメッセージ

例えば,socketを使ったプログラム(multicli.py,multisrv.py)とzmqを使ったプログラム(zmqSrv.pyzmqCli.py)がそれぞれで実行可能なときにこれらのサーバーを統合できるかどうか.
なお,socketzmqで書き直したり,zmqsocketで書き直すことは不可能でした.

該当のソースコード

このコードは簡略化したものでテキストを送受信するプログラムです.
実際のコードはシミュレータの改造なので,簡略化したもので試してみています.

zmqSrv

1import zmq 2 3def start_svr(): 4 context = zmq.Context() 5 socket = context.socket(zmq.REP) 6 socket.bind("tcp://*:11110") 7 8 print("Server startup.") 9 10 while True: 11 message = socket.recv_string() 12 print("Received: %s" % message) 13 socket.send_string("Reply: %s" % message) 14 15 socket.close() 16 context.destroy() 17 18if __name__ == "__main__": 19 start_srv()

zmqCli

1import sys 2import zmq 3 4def start_cli(): 5 context = zmq.Context() 6 socket = context.socket(zmq.REQ) 7 socket.connect("tcp://localhost:11110") 8 9 while True: 10 print("Enter message:") 11 message = sys.stdin.readline() 12 socket.send_string(message) 13 14 recv_message = socket.recv_string() 15 print("Receive: %s" % recv_message) 16 17 socket.close() 18 context.destroy() 19 20if __name__ == "__main__": 21 start_cli()

multicli

1from __future__ import print_function 2import socket 3import sys 4from contextlib import closing 5import select 6def main(): 7 host = '127.0.0.1' 8 #port = 4000 9 port=11110 10 bufsize = 4096 11 12 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 13 with closing(sock): 14 sock.connect((host, port)) 15 while True: 16 line = sys.stdin.readline().rstrip() 17 if len(line) == 0: 18 break 19 sock.send(line.encode('utf-8')) 20 print(sock.recv(bufsize)) 21 return 22 23if __name__ == '__main__': 24 main()

自分で調べたことや試したこと

試したこと:
multiCliのポートを同じにして通信できるかどうか

調べた結果:
そもそもZeroMQは使うときにzmqのプロトコル(REPとかREQ)に従ったソケットを作ってからやり取りしているので不可能なのではとは思ったのですが,どうにか実現できないでしょうか.

構成案としては,zeromqを基にしたサーバーをマルチサーバーにして,zmqを使ったClientからの受信はもちろん,socketを使ったClientからの受信も可能にしたい.

使っているツールのバージョンなど補足情報

zmq,python3,ubuntu18.0.4

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問