HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2019
1228
mashamoPythonと連動がしたい5解決


mashamo

リンク

2019/12/28(Sat) 18:00:05|NO.89123

最近HSPだけじゃなくてPythonに手を出し始めたんですが、Pythonで作ったゲームやソフトとHSP
で作ったゲームやソフトが連動させることってできないのかなと思い質問させていただきました。
私が想像している連動というのは、比較的リアルタイムに値のやり取りが双方でできている状態の
ことです。できるのであればやり方を、できないのであれば何かを間に挟むなど苦肉の策でもいい
のでお願いします。



この記事に返信する


kanamaru

リンク

2019/12/29(Sun) 17:01:21|NO.89125

もしかしたらもっと簡単な方法があるのかもしれないですが、
ソケット通信がいいのではないでしょうか。
hspsockのサンプルの中にserver2.pyというのがあるので実行してみてください。
その後、pythonで

# -*- coding:utf-8 -*- import socket host = socket.gethostbyname(socket.gethostname()) port = 999 client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect((host, port)) client.send("for hsp"); response = client.recv(4096) print response
を実行してみてください。
相互に文字列のやり取りが行われるのが確認できると思います。
やり取りは一回しか行いませんが、ソースを改良することで繰り返し行えるようにできます。
連携というのが一対一ならこれで出来るはずです。
今回はおそらく一対一だと考えられるので、hsp側をサーバー、python側をクライアントにしました。
逆でもいいと思います。
一対一じゃない場合は、動かすプログラムとは別にサーバーを作り、
(サーバーはhspで作ってもpythonで作ってもいいです)
ゲームやソフトがそのサーバーに接続するというのがいいでしょう。
一体複数の時は一の方をサーバーにしてもいいかもしれません。



mashamo

リンク

2019/12/30(Mon) 16:38:23|NO.89134

返信遅れてすみません
実行してみたところ、Python側で
client.send("for hsp");
TypeError: a bytes-like object is required, not 'str'
というエラーをはきました。
どうしたらよろしいでしょうか?



kanamaru

リンク

2019/12/30(Mon) 17:52:20|NO.89135

すいません。こちらで実行確認したときはpython2系でした。
python3系で実行しようとするとそのようなエラーが発生するようです。

import socket host = socket.gethostbyname(socket.gethostname()) port = 999 client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect((host, port)) client.send("テスト".encode("shift-jis")); response = client.recv(4096) print(response.decode("shift-jis"))
pythonのプログラムを上記に変えればpython3系で動きます。
上記プログラムに変更して実行してみてください。



kanamaru

リンク

2019/12/30(Mon) 18:32:08|NO.89136

プログラムを改良して、python2系とpython3系で同じプログラムで動くようにしました。

import socket import sys host = socket.gethostbyname(socket.gethostname()) port = 999 client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect((host, port)) if sys.version_info[0]==2: client.send("テスト"); else: client.send("テスト".encode("shift-jis")); response = client.recv(4096) if sys.version_info[0]==2: print(response) else: print(response.decode("shift-jis"))



mashamo

リンク

2019/12/31(Tue) 12:03:53|NO.89141

すみません何から何まで
おかげで無事解決しました
本当にありがとうございました



ONION software Copyright 1997-2023(c) All rights reserved.