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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Python

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

Pepper

Pepperとは、SoftBankモバイル向けにアルデバラン・ロボティクス社が開発した人型ロボットです。周囲を把握するための3Dカメラや、障害物を回避する超音波システム、触覚センサーを搭載しています。ユーザーへの対応を学習し、言語やジェスチャーを変更することもできます。

Q&A

解決済

1回答

6440閲覧

pepper君とのソケット通信

genn.zeitou

総合スコア9

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Python

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

Pepper

Pepperとは、SoftBankモバイル向けにアルデバラン・ロボティクス社が開発した人型ロボットです。周囲を把握するための3Dカメラや、障害物を回避する超音波システム、触覚センサーを搭載しています。ユーザーへの対応を学習し、言語やジェスチャーを変更することもできます。

1グッド

1クリップ

投稿2016/06/10 11:30

編集2016/06/12 03:24

pepper君とUnityで作ったPC用のアプリをローカルでソケット通信をさせて連携させたいのですがローカルでのソケット通信の方法が分からず困っています。参考でもよいので何方か教えていただけないでしょうか。
LANケーブルを繋いでの通信を想定しています。
ソースコードを載せます。ほぼすべてサイトの参考なのですが、ソケット通信について理解したつもりです。
public class test : MonoBehaviour {
Socket listener;
Socket soket;
int poot = 1234;
private Thread dispatchThread;

public bool IsLoop { get; set; } public class StateObject { // Client socket. public Socket workSocket = null; // Size of receive buffer. public const int BufferSize = 1024; // Receive buffer. public byte[] buffer = new byte[BufferSize]; // Received data string. public StringBuilder sb = new StringBuilder(); } List<StateObject> activeConnections = new List<StateObject>(); void Start () { HostStartup (poot); } void Update () {} //yobarerut public void test5(){ Send ("aaaaaaaaaa"); } //サーバとして起動 public void HostStartup(int poot){ listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); listener.Bind(new IPEndPoint(IPAddress.Any, poot)); listener.Listen(10); Debug.Log ("ソケットを開始"); listener.BeginAccept( new AsyncCallback(AcceptCallback),listener ); //LaunchThread (); } public void AcceptCallback(IAsyncResult ar) { // Get the socket that handles the client request. Socket listener = (Socket) ar.AsyncState; Socket handler = listener.EndAccept(ar); // Create the state object. StateObject state = new StateObject(); state.workSocket = handler; handler.BeginReceive( state.buffer, 0, StateObject.BufferSize, 0,new AsyncCallback(ReadCallback), state); //確立した接続のオブジェクトをリストに追加 //activeConnections.Add (state); //Debug.LogFormat ("there is {0} connections", activeConnections.Count); //接続待ちを再開しないと次の接続を受け入れなくなる listener.BeginAccept( new AsyncCallback(AcceptCallback),listener ); } public void ReadCallback(IAsyncResult ar) { String content = String.Empty; // Retrieve the state object and the handler socket // from the asynchronous state object. StateObject state = (StateObject) ar.AsyncState; Socket handler = state.workSocket; // Read data from the client socket. int bytesRead = handler.EndReceive(ar); if (bytesRead > 0) { // There might be more data, so store the data received so far. state.sb.Append(Encoding.ASCII.GetString(state.buffer,0,bytesRead)); // Check for end-of-file tag. If it is not there, read // more data. content = state.sb.ToString(); Debug.LogFormat ("content : "+content); } } //データの送信 private void Send(String data) { soket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); soket.NoDelay = true; soket.Connect(IPAddress.Parse("アドレス"),poot); // Convert the string data to byte data using ASCII encoding. byte[] byteData = Encoding.ASCII.GetBytes(data); // Begin sending the data to the remote device. soket.BeginSend(byteData, 0, byteData.Length, 0,new AsyncCallback(SendCallback), soket); } private void SendCallback(IAsyncResult ar) { try { // Retrieve the socket from the state object. Socket handler = (Socket) ar.AsyncState; // Complete sending the data to the remote device. int bytesSent = handler.EndSend(ar); //Debug.LogFormat("Sent {0} bytes to client.", bytesSent); //この2つはセットでつかるらしい handler.Shutdown(SocketShutdown.Both); handler.Close(); } catch (Exception e) { Debug.Log(e.ToString()); } }

追記依頼について

申し訳ありませんでした。ご指摘感謝いたします。
実際にやりたいことはpepper君とPCを有線でつないで、pepper君から文字列をソケットでアプリに送り文字列に応じて処理をさせたいのです。
pepper君がクライアント、PCがサーバという役割です。
pepper君側のソケット通信ではPythonを使って通信させたいのですがうまく行かずに困っています。

def onInput_inputName(self, p): host = "アドレス" port = 1234 bufsize = 4096 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((host, port)) sock.send("テスト") sock.close() self.outputName(p) self.onStopped() pass
DrqYuto👍を押しています

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

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

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

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

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

Zuishin

2016/06/10 12:15

ソースも完成し、理屈も理解したなら教わる必要はないのではないですか? このソースを使ったソフトはどのような振る舞いをして、どのようにうまくいかないのか、何が理解できて何が理解できないのかを書いてください。
退会済みユーザー

退会済みユーザー

2016/06/13 01:33

何がうまくいかないのでしょう。 〜をやったら〜になるはずが〜になった、とかをわかりやすく書いて下さい。
guest

回答1

0

ベストアンサー

質問が抽象的なので、回答も抽象的になりますが、エラーが出ないようにプログラムを組み、正しく接続して、間違いなく動作させればうまくいくと思います。

投稿2016/06/12 04:09

Zuishin

総合スコア28660

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問