Microsoft Word - IPC-intro.docx

Similar documents
Microsoft Word - HowToControlRobotWithJulius.docx

// このクラスの有効期間中の各呼び出しに使用される キャッシュされた Socket オブジェクト Socket socket = null; // 非同期処理が完了したことを通知するために信号を送るオブジェクト static ManualResetEvent clientdone = new Ma

TFTP serverの実装

12.1 インターネットアドレス インターネットアドレス インターネットアドレス 32 ビットの長さを持つインターネットに接続されたマシンを識別するのに使う インターネットアドレスは ピリオドで区切られたトークンの並びで表現されることもある インターネットアドレス

8. Windows の補足情報 コマンドの使用についての説明です Windows からのファイル直接印刷 Windows でコマンドを使用したファイル直接印刷の方法についての説明です この機能はネットワーク接続をしているときに使用できます この方法で印刷できるファイルは 本機が搭載しているエミュレ

Microsoft Word - USB60F_Raspi_ doc

演算増幅器

パケットモニター (Wireshark) の使い方 第 1 版 1.Wireshark とは ネットワーク上 (LAN ケーブルに流れている ) のパケットを取得して その中の情報を画面に表示するソフトウェア (LAN アナライザーまたはパケットモニター ) の 1 つに Wiresh

ユーティリティ 管理番号 内容 対象バージョン 157 管理情報バッチ登録コマンド (utliupdt) のメッセージ出力に対し リダイレクトまたはパイプを使用すると メッセージが途中までしか出 力されないことがある 267 転送集計コマンド (utllogcnt) でファイル ID とホスト名の組

PowerPoint Presentation

Windows Server 2003での使用方法

GIGA光SW-HUB

ポインタ変数

arduino プログラミング課題集 ( Ver /06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイ

スライド 1

Si 知識情報処理

目次 1. 概要 動作環境

メソッドのまとめ

PowerTyper マイクロコードダウンロード手順

RTC_STM32F4 の説明 2013/10/20 STM32F4 内蔵 RTC の日付 時刻の設定および読み込みを行うプログラムです UART2( 非同期シリアル通信ポート 2) を使用して RTC の設定および読み込みを行います 無料の開発ツール Atollic TrueSTUDIO for

任意の間隔での FTP 画像送信イベントの設定方法 はじめに 本ドキュメントでは AXIS ネットワークカメラ / ビデオエンコーダにおいて任意の間隔で画像を FTP サー バーへ送信するイベントの設定手順を説明します 設定手順手順 1:AXIS ネットワークカメラ / ビデオエンコーダの設定ページ

Upload path ファイル送信先ディレクトリのパスを指定します ホームディレクトリに画像を送信する場合は空白のまま サブディレクトリに画像を送信する場合はディレクトリ名を指定します さらに下位のディレクトリを指定する場合は \ マークを利用します 例 ) ホームディレクトリ以下の camera

Upload path ファイル送信先ディレクトリのパスを指定します ホームディレクトリに画像を送信する場合は空白のまま サブディレクトリに画像を送信する場合はディレクトリ名を指定します さらに下位のディレクトリを指定する場合は \ マークを利用します 例 ) ホームディレクトリ以下の camera

CoIDE 用 F4D_VCP の説明 V /07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです Free の開発ツール CoIDE で作成した STM32F4 Discovery 用のプロジェクトです プログラムの開始番地は 0x

ポインタ変数

1. ネットワーク経由でダウンロードする場合の注意事項 ダウンロード作業における確認事項 PC 上にファイアウォールの設定がされている場合は 必ずファイアウォールを無効にしてください また ウイルス検知ソフトウェアが起動している場合は 一旦その機能を無効にしてください プリンターは必ず停止状態 (

動体検知によるメール送信イベントの設定方法(ファームウェアⅴ7.1ⅹ以上)

Microsoft Word - Qsync設定の手引き.docx

使用説明書

Microsoft Word - SE第15回.doc

無線LAN JRL-710/720シリーズ ファームウェアバージョンアップマニュアル 第2.1版

PowerPoint プレゼンテーション

SiTCP ユーティリティユーザガイド 2014 年 6 月 18 日 0.73 版 Bee Beans Technologies 1

AXIS 1611クイックインストールガイド

まず,13 行目の HardwareTimer Timer(1); は,HardwareTimer というクラスを利用するという宣言である. この宣言によって Timer というインスタンスが生成される.Timer(1) の 1 は,OpenCM に 4 個用意されているタイマのうち,1 番のタイマ

PowerPoint Presentation

スライド 1

メディプロ1 Javaサーブレット補足資料.ppt

PowerPoint Presentation

2. Save をクリックします 3. System Options - Network - TCP/IP - Advanced を開き Primary DNS server と Secondary DNS Server に AXIS ネットワークカメラ / ビデオエンコーダが参照できる DNS サ

SLCONFIG の操作 JF1PYE Ⅰ. PC と slconfig の通信設定 Ⅱ. Slconfig の操作 Ⅲ. 端末ソフトによる Command 機能 Ⅳ. slconfig 実行形式プログラムの作成 Ⅴ. 端末ソフト Tera Term のダウンロード インストー

1. USB の VCP( 仮想 COM ポート ) について USB の VCP( 仮想 COM ポート ) は USB を非同期シリアル通信として使用するための USB のドライバです PC には VCP ドライバをインストールする必要があります USB の VCP( 仮想 COM ポート )

株式会社日新テクニカ USB シリアル CAN 変換器 /8/22 ホームページ : メール

ファイル入出力

QLabセットアップガイド for CL/QL/TFシリーズ

Windows Powershell 入門

Windows 7ファイル送信方法 SMB編

利用ガイド

User's Manual補足:遠隔監視

RsMulti の取扱説明 「RS232C で直接接続する(LAN を使用しない場合)」

システムインテグレータのIPv6対応

PowerPoint プレゼンテーション

レコードとオブジェクト

おらんかにクライアント操作マニュアル

ファイル入出力

Microsoft PowerPoint ppt

Delphi/400でFlash動画の実装

Microsoft Word - VPN...[.U.K.C.hLinux doc

Net'Attest EPS設定例

ご利用のコンピュータを設定する方法 このラボの作業を行うには 事前設定された dcloud ラボを使用するか 自身のコンピュータをセットアップします 詳細については イベントの事前準備 [ 英語 ] とラボの設定 [ 英語 ] の両方のモジュールを参照してください Python を使用した Spar

1. A/D 入力について分解能 12bit の A/D コンバータ入力です A/D 入力電圧とディジタル値との対応は理論上 入力電圧 0V : 0 入力電圧 +3V : 4095 です 実際はオフセットと傾きがあり ぴったりこの数値にはなりません 2. A/D 入力に使用する信号 STM32L_A

ITdumpsFree Get free valid exam dumps and pass your exam test with confidence

BizBrowser SmartDevice Android開発用スタートアップガイド

<48554C46545F F A5490E08E9197BF2E786C73>

演算増幅器

フィルタとは

HeartCoreインストールマニュアル(PHP版)

オートビュー

PowerPoint Presentation

E-Post BossCheck Server 運用マニュアル&事例集

改版履歴 本書の改版履歴は以下のとおりです 日付 改版理由 変更箇所 版数 2014/09/04 初版発行 版 2015/03/30 第 1.1 版に改訂 対象 OS 追加 1.1 版 2015/07/10 第 1.2 版に改訂 対象 OS 追加 1.2 版 2015/09/04 第 1

Microsoft PowerPoint - RemoteGuide pptx

Microsoft Word - u-CAT’Ý™è…K…C…

MS916 バッチ操作ガイド FW バージョン 0.52 向け バッチ操作の基本 MS916 のバッチ操作について バッチ操作では 読取ったバーコードデータはすべて 不揮発性のメモリ (1MB ROM JAN-13 約 50,000 件 ) に保存されます メモリに保存されたデータは任意のタイミング

HeartCoreインストールマニュアル

Microsoft Word - VBA基礎(6).docx

プレゼンタイトルを入力してください

スケジュールによるメール送信イベントの設定方法 ( ファームウエア v6.5x 以降 ) はじめに 本ドキュメントでは Axis ネットワークカメラのファームウエア v6.5x 以降で 指定された曜日と時間帯に 画像を添付したメールを送信するための設定方法を説明します 設定手順 手順 1:Axis

PowerPoint Presentation

WebOTXプロファイラを使用したメモリリーク調査方法

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

◎phpapi.indd

Troubleshooting SSH connections with Reflection X

VPN 接続の設定

4-7.コネクト2.0_電話操作マニュアル(ZoiperFree)_v1.1.0

SMB ファイル共有機能 設定 / 利用ガイド 本ガイドは 複合機 bizhub C658/C558/C458/ C368/C308/C258 を例に説明をしています 他の機種の場合も操作方法は同じです 本ガイドでは SMB ファイル共有機能を複合機で利用するために必要な設定 / 利用方法を説明しま

SDC_SDIO_STM32F4 の説明 2013/09/17 SDIO インターフェースで SD カードをアクセスするプログラムのプロジェクトサンプルです FAT でファイルアクセスするために FatFs( 汎用 FAT ファイルシステム モジュール ) を使用しています VCP(USB 仮想 C

PYTHON 資料 電脳梁山泊烏賊塾 PYTHON 入門 関数とメソッド 関数とメソッド Python には関数 (function) とメソッド (method) が有る モジュール内に def で定義されて居る物が関数 クラス内に def で定義されて居る物がメソッドに成る ( 正確にはクラスが

push-exchanger利用手順ベンダー向け

Net'Attest EPS設定例

PYTHON 資料 電脳梁山泊烏賊塾 PYTHON 入門 ゲームプログラミング スプライト スプライト Pygame では pygame.sprite を用いる事でスプライトの管理 描画 衝突判定等を簡単に行う事が出来る 此れを利用してキャラクター操作に関する各種機能をスプライトクラスとして 1 個

HeartCore(PHP 版 ) インストール手順について説明いたします なお 本資料は 例として下記内容を前提として説明しております 環境情報 対象 OS: Linux ( ディストリビューション : Red Hat Enterprise Linux Server) APサーバ : Apache

Windows XPファイル送信方法 SMB編

センサーデバイスへの仮想IP割り当て実験

これを調べるには pwd というコマンドを使います pwd とは print working directory の頭文 字をとったもので これから意味は明らかですよね 演習 1 (a) pwd を実行した結果を書け なお 立ち上げた直後の作業用ディレクトリのことをホー ムディレクトリ もしくは単に

PowerPoint プレゼンテーション

Microsoft PowerPoint - RM-PDU_IP設定方法.ppt

1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String

Microsoft PowerPoint - 10Com2.ppt

スライド 1

Transcription:

プロセス間通信 ( サーバー クライアント ) について同じコンピュータで動いている複数のプロセス ( 実行中のプログラムのこと ) もしくは異なるコンピュータで動いている複数のプロセスの間の通信 ( 情報の受け渡し ) のための方法ここでは 一つのプロセスをサーバー 他のプロセスをクライアントとする方法について述べる サーバーは文字通り クライアントからの要求を受けて何らかの仕事をする 受け のプロセス クライアントはサーバーに対して要求を出してサーバーに仕事をさせるプロセス 例をあげれば ウェブページの閲覧を提供しているプロセスがサーバー それにアクセスするブラウザがクライアント 1. socket という仕組みを使う サーバーはクライアントからの接続要求を受け付けた後 そのクライアントから送られてきたメッセージをほぼそのまま返す 以下では ソケット という概念が重要 ---これは 2 つのプロセス ( サーバーとクライアント ) をつなぐパイプ ( 管 ) のようなものと考えるとよいだろう 以下ではソケットを作り それをサーバーとクライアントそれぞれに結びつけている (bind している ) サーバーの例 #! /usr/bin/python # -*- cidubg:utf-8 -*- # server1.py import socket # socket モジュールをインポート from time import ctime # 現在の時刻を文字列に変換 host = '127.0.0.1' # このプログラムを実行する PC が対象 port = 9876 # 相手の IP アドレスと使用するポート番号を指定 BufSize = 1024 # 受信できる文字列のサイズ #socket を作る : # AF_INET: IPv4 インターネット プロトコルの使用 # SOCK_STREAM: TCP/IP を用いた STREAM 型のソケットの使用 serversock = socket.socket(socket.af_inet, socket.sock_stream) # 作成したソケットをサーバー (host:port で指定 ) に関連付けする serversock.bind((host,port)) # 受け付ける client の数を 1 とする serversock.listen(1) print 'Waiting for connections...' # 接続要求を受け取り クライアントの IP アドレスとポート番号を記録 clientsock, client_address = serversock.accept() # 無限ループ rcvmsg = clientsock.recv(bufsize) # クライアントからの文字列 (1KB) 受信 print 'Received -> %s' % (rcvmsg) # 受信したメッセージを表示 if rcvmsg == '': # 受信した文字列が空 (= 接続断 ) ならループを終了 print 'Type message...' clientsock.sendall('[%s] %s'%(ctime(), rcvmsg)) # 文字列を送信 clientsock.close() # ソケットを閉じる

以下はクライアント : の例 : #! /usr/bin/python # -*- cidubg:utf-8 -*- # client1.py import socket host = '127.0.0.1' # サーバーの IP アドレスとポート番号 port = 9876 BufSize = 1024 # 受信できる文字列のサイズ # サーバーと通信するためのソケット作成 clientsock = socket.socket(socket.af_inet, socket.sock_stream) clientsock.connect((host,port)) # 無限ループ c_msg = raw_input('> ') # プロンプトを出して入力待ち if c_msg == '': # 入力なしなら終了 # clientsock.send(c_msg) # 入力文字列をサーバーに送る rcvmsg = clientsock.recv(bufsize) # サーバーから受信 print 'Received -> %s' % (rcvmsg) # それを表示 if rcvmsg == '': # 空文字列ならば終了 clientsock.close() # ソケットを閉じる 演習 1. 自分の PC でまず server1.py を実行する 次に 別なコマンドプロンプト ( もしくは Terminal) 上で client1.py を実行する client1.py のもとでいろいろな文字列を入力してみる ( その都度 Enter キーを押すのをわすれないこと ) 最後に コントロールキーを押したまま z を押す ( これをコントロール Z, もしくは Ctrl-Z とか^Z と表す ) どうなるだろうか? またそれはなぜだろうか? ( ヒント : コマンドプロンプト上では Ctrl-Z は end-of-file を意味します Linux では Ctrl-D です なお WIndows では Ctrl-Z は やり直し / もとに戻す ためのショートカット ) 演習 2. 自分の PC でまず server1.py を実行する 次に 別なコマンドプロンプト ( もしくは Terminal) 上で client1.py を実行する さらに 別なコマンドプロンプト ( もしくは Terminal) 上で client1.py を実行する ( つまり client1.py を2つ別々に実行させる ) それぞれの client1.py のもとでいろいろな文字列を入力してみる ( その都度 Enter キーを押すのをわすれないこと ) どうなるだろうか?

なお 今のプログラムで 127.0.0.1 (localhost) をサーバープロセスが実行されている PC の IP アドレス ( 例えば 192.168.41.111 など ) にすると 別な PC で実行されているサーバーとクライアントの間の通信ができる 2. 接続できるクライアント数を増やす接続できるクライアントは ( プログラムから予想できるように ) 1 個に限られていた また その一つが接続を切るとサーバーも終了するものであった ( プログラムを読んで そこの仕組みを理解しておこう ) ここでは接続できるクライアント数を増やすことを考えよう 書き換えるのは server1.py である まず 一つのクライアントだけに制限していた以下の行を次のようにする : # 受け付ける client の数を 1 とする serversock.listen(1) 次のようにする : # 受け付ける client の数を 5 とする serversock.listen(5) また クライアント接続のコードを新たに の中に入れ ひとつのクライアントが接続を断ったら その接続を閉じ (close) てから 新たなクライアントに接続するようにする : # 無限ループ # 接続要求を受け取り クライアントの IP アドレスとポート番号を記録 clientsock, client_address = serversock.accept() print '...connected from:', client_address rcvmsg = clientsock.recv(bufsize) # クライアントからの文字列 (1KB) 受信 print 'Received->%s'%(rcvmsg) # 受信したメッセージを表示 if rcvmsg == '': # 受信した文字列が空 (= 接続断 ) ならループを終了 print 'Type message...' clientsock.sendall('[%s] %s'%(ctime(), rcvmsg)) # 文字列を送信 clientsock.close() # クライアントとの接続を切る 以上の改変をしたものが server2.py である 演習 3. 自分の PC でまず server2.py を実行する 次に別々のコマンドプロンプト ( もしくは Terminal) 上で client1.py を 1 つずつ実行する それぞれの client1.py のもとでいろいろな文字列を入力してみる ( その都度 Enter キーを押すのをわすれないこと ) どうなるだろうか? どれに反応があるだろう

か またそれはなぜか さらに反応があったクライアントプログラムを Ctrl-Z を入力して接続を断ったら 何が起こるだろうか? 残ったクライアントでいろいろな入力をしてみよう どのような反応があるだろうか 演習 4. クライアントから 滅びの言葉 ( 例えば balse) の入力があったら サーバーが停止するようにさせたい どこをどのようにすればこれが実現できるだろうか 3. 複数のクライアントから同時に接続できるようにする前節の server2.py では 演習 3 で見たように 同時に複数のクライアントに接続することはできない しかし チャットプログラムのように 複数の人が同じサーバーにアクセスして情報交換できるようにすることが望ましい場合もある つまり サーバーは クライアントからのアクセス要求があればそれらに接続するためのソケットを それぞれ 作り それぞれ からの情報を受信しすることができてほしい( チャットプログラムならばさらに 受信したメッセージをクライアント全てに送信するこことが必要だろう ) このような用途ために いわば 分身の術 ( クライアントからの接続要求をうけ メッセージを受信し データを送信するという プログラム を複製する ) を可能にする仕組みが色々用意されている その一つの方法は スレッド (thread) と呼ばれるものである もっと簡単な方法は Python の acyncore モジュールの dispatcher を使う方法である Acyncore とはソケットを使った非同期通信のためのモジュール ( スレッドは使っていない ) で 通信が勝手なタイミング ( 非同期的 ) で行われる通信を扱うものである 基本的な使い方は 次ページの server3.py プログラムに見られるように dispatcher クラスのインスタンスを作り acyncore.loop を呼び出すことである 最後の方にある server = EchoServer(HOST,PORT) が dispacher クラスのインスタンスを作って 変数 server にセットしている そして最後にある acyncore.loop によって 通信があるかどうおか監視が行われ 通信があった場合に EchoServer クラス ( これ自体は asyncore.dispatcher クラスのサブクラス ) で定義された handle_accept 関数の中身が実行される dispacher クラス ( またそのサブクラスである EchoSerer クラス ) の init メソッドは インスタンスを作るもので そこではソケットを作り HOST:PORT に bind している それに対し handle_accept() メソッドは listen 中のソケットで read イベントが発生した時に何をするかを記述したものである accept メソッドにより接続を受け入れる 結果が None の場合は接続が行われなかったことを意味する 接続が行われた時は クライアントのアドレスとソケットを返すので このプログラムでは EchoHanler クラスにより 受信したメッセージを (send メソッドによりそのままクライアントに送り返すようにしている 演習 5. このプログラムが 192.168.41.111 上で動いている 自分の PC を sirai-lab のネットワークに接続し クライアントのプログラムを適切に修正して 192.168,41,111 上で動いている server3.py と通信してみよ

#! /usr/bin/python # server3.py import asyncore, socket HOST = '127.0.0.1' PORT = 9876 BufSize = 1024 NoOfClients = 5 class EchoHandler(asyncore.dispatcher_with_send): def handle_read(self): data = self.recv(bufsize) if data: self.send(data) class EchoServer(asyncore.dispatcher): def init (self, host, port): asyncore.dispatcher. init (self) self.create_socket(socket.af_inet, socket.sock_stream) self.set_reuse_addr() self.bind((host,port)) self.listen(noofclients) def handle_accept(self): pair = self.accept() if pair is None: pass else: sock, addr = pair print('incoming connection from %s' % repr(addr)) handler = EchoHandler(sock) server = EchoServer(HOST,PORT) asyncore.loop()

4. 音声認識システム Julius Julius は-module オプションにより モジュールモード で起動する. モジュールモードでは, 起動後, クライアントからの TCP/IP 接続待ちとなる. デフォルトのポート番号は 10500 であるが, ポート番号を 12345 にするには -module 12345 とすればよい. クライアントから接続を受けると,Julius は音声認識可能な状態となり 音声入力に対して音声認識を行い, クライアントへ認識結果を送信する. また, 音声入力の開始 終了などのイベントも随時送出する. クライアントからは, 認識の一時停止や再開といった動作制御, 認識用文法の追加や削除などが行える. クライアントとの接続は一対一を想定しており, 複数クライアントの同時接続には対応していない. クライアントとのネットワークソケットが切断されると,Julius は認識を停止して, 次のクライアントが接続するまで待ち状態となる. クライアントから Julius にソケット経由でコマンドを送ることで,Julius を制御することができる. コマンドは, コマンドの文字列を末尾に改行コード " n" をつけて送信する. そのコマンドが引数を必要とする場合は, そのコマンド文字列の次の行として, 引数を送る. 次のrapiro.py は モジュールモードで動かした Julius をサーバーとして 音声認識による出力を受け取り その出力をシリアル通信により Rapiro ロボットに送るプログラムである : #!/usr/bin/env python # -*- coding: utf-8 -*- import socket, serial host = 'localhost' port = 10500 clientsock = socket.socket(socket.af_inet, socket.sock_stream) clientsock.connect((host, port)) com = serial.serial('/dev/ttyama0',57600,timeout=10) recv_data = clientsock.recv(512) com.write(recv_data)