前提・実現したいこと
私はネットワークプログラミング初心者です.
今,ソケット通信をしてC言語からUnityに文字列を送りたいです.
ここを参考にしながら,試しに書いてみましたが,思った通りに文字列が送れませんでした.
発生している問題・エラーメッセージ
Helloという文字列を送り続けるプログラムを書いてみました.
しかしbookという文字列を送るとkbookという風に送られてしまいます.
該当のソースコード
c++
1int main() 2{ 3 WSADATA wsaData; 4 SOCKET sock0; 5 struct sockaddr_in addr; 6 struct sockaddr_in client; 7 int len; 8 SOCKET sock; 9 10 // winsock2の初期化 11 WSAStartup(MAKEWORD(2, 0), &wsaData); 12 13 // ソケットの作成 14 sock0 = socket(AF_INET, SOCK_STREAM, 0); 15 16 // ソケットの設定 17 addr.sin_family = AF_INET; 18 addr.sin_port = htons(12345); 19 addr.sin_addr.S_un.S_addr = INADDR_ANY; 20 bind(sock0, (struct sockaddr *)&addr, sizeof(addr)); 21 22 // TCPクライアントからの接続要求を待てる状態にする 23 listen(sock0, 5); 24 25 // TCPクライアントからの接続要求を受け付ける 26 len = sizeof(client); 27 sock = accept(sock0, (struct sockaddr *)&client, &len); 28 29 // 5文字送信 30 while (true) 31 { 32 send(sock, "HELLO", 5, 0); 33 } 34 35 // TCPセッションの終了 36 closesocket(sock); 37 38 // winsock2の終了処理 39 WSACleanup(); 40 41 return 0; 42} 43
c#
1using System; 2using System.Collections; 3using System.Collections.Generic; 4using System.Net.Sockets; 5using UnityEngine; 6 7public class Client : MonoBehaviour { 8 TcpClient client; 9 NetworkStream stream; 10 Byte[] bytes = new Byte[5]; 11 int i; 12 13 // Use this for initialization 14 void Start () { 15 try 16 { 17 //サーバーに接続 18 Int32 port = 12345; 19 client = new TcpClient("127.0.0.1", port); 20 21 stream = client.GetStream(); 22 23 } 24 25 catch (Exception e) 26 { 27 Debug.Log(e.Message); 28 } 29 30 } 31 32 // Update is called once per frame 33 void Update () { 34 //メッセージを受信 35 if ((i = stream.Read(bytes, 0, bytes.Length)) != 0) 36 { 37 String data = System.Text.Encoding.UTF8.GetString(bytes, 0, i); 38 Debug.Log(data); 39 } 40 41 } 42 43 private void OnApplicationQuit() 44 { 45 client.Close(); 46 } 47} 48
試したこと
Byte[] bytes = new Byte[5];を送る文字数に応じて変えればいいとわかるのですが,
それを動的に変えるにはどうすればいいかわかりません.
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/13 09:57
2018/10/13 10:56
2018/10/13 11:03