質問するログイン新規登録

質問編集履歴

3

書式の改善

2017/08/04 04:46

投稿

pom_pom
pom_pom

スコア13

title CHANGED
File without changes
body CHANGED
@@ -5,6 +5,7 @@
5
5
 
6
6
  参考にしているコードはこちらです。http://qiita.com/nenjiru/items/b1ffd4a01b3d96b2bbb7
7
7
 
8
+ ```ここに言語を入力
8
9
  #define _WINSOCK_DEPRECATED_NO_WARNINGS
9
10
  #include <stdio.h>
10
11
  #include <string.h>
@@ -50,6 +51,7 @@
50
51
  closesocket(udp);
51
52
  WSACleanup();
52
53
  }
54
+ ```
53
55
  私はVisual Studioを使用しているため、サイトのコードを少し変更しました。
54
56
  sendto(udp, (unsigned char*)data, sizeof data, 0, (struct sockaddr *)&addr, sizeof(addr));のところでエラーが出てしまいます。
55
57
 

2

ソースコードの修正

2017/08/04 04:46

投稿

pom_pom
pom_pom

スコア13

title CHANGED
@@ -1,1 +1,1 @@
1
- CとUnity(C#)間のUDP通信について
1
+ C言語のUDP通信について
body CHANGED
File without changes

1

ソースコードの修正

2017/08/02 21:24

投稿

pom_pom
pom_pom

スコア13

title CHANGED
File without changes
body CHANGED
@@ -5,102 +5,53 @@
5
5
 
6
6
  参考にしているコードはこちらです。http://qiita.com/nenjiru/items/b1ffd4a01b3d96b2bbb7
7
7
 
8
- 送信(C)側
8
+ #define _WINSOCK_DEPRECATED_NO_WARNINGS
9
9
  #include <stdio.h>
10
10
  #include <string.h>
11
- #include <unistd.h>
11
+ #include <WinSock2.h>
12
- #include <netdb.h>
13
- #include <sys/socket.h>
14
12
 
15
13
  #define INTERVAL_TIME 1
16
14
 
17
- void udpSend (char* address, int port);
15
+ void udpSend(char* address, int port);
18
- int port = 20001;
16
+ int port = 20001;//ポート番号
19
- char addr[] = "0.0.0.0";
17
+ char addr[] = "0.0.0.0";//配列を用意
20
- double data[] = { 0, 1, 0.0005, -0.0009 };
18
+ double data[] = { 0, 1, 0.0005, -0.0009 };//送信するデータ
21
19
 
20
+
22
21
  int main()
23
22
  {
23
+ /* Windows 独自の設定 */
24
+ WSADATA data;
25
+ WSAStartup(MAKEWORD(2, 0), &data);
26
+
24
- udpSend(addr,port);
27
+ udpSend(addr, port);
25
- return 0;
28
+ return 0;
26
29
  }
27
30
 
28
31
  void udpSend(char* address, int port)
29
32
  {
30
- int udp = socket(AF_INET,SOCK_DGRAM,0);
33
+ int udp = socket(AF_INET, SOCK_DGRAM, 0);
31
- struct sockaddr_in addr;
34
+ struct sockaddr_in addr;
32
- struct hostent *host;
35
+ struct hostent *host;
33
36
 
37
+ /*構造体のセット*/
34
- memset(&addr, 0, sizeof(addr));
38
+ memset(&addr, 0, sizeof(addr));
35
- host = gethostbyname(address);
39
+ host = gethostbyname(address);
36
- memcpy(host->h_addr, &addr.sin_addr, host->h_length);
40
+ memcpy(host->h_addr, &addr.sin_addr, host->h_length);
37
- addr.sin_family = AF_INET;
41
+ addr.sin_family = AF_INET;
38
- addr.sin_port = htons(port);
42
+ addr.sin_port = htons(port);
39
43
 
40
- while (1)
44
+ while (1)
41
- {
45
+ {
42
- sendto(udp, (unsigned char*) data, sizeof data, 0, (struct sockaddr *)&addr, sizeof(addr));
46
+ sendto(udp, (unsigned char*)data, sizeof data, 0, (struct sockaddr *)&addr, sizeof(addr));
43
- sleep(INTERVAL_TIME);
47
+ Sleep(INTERVAL_TIME);
44
- }
48
+ }
45
49
 
46
- close(udp);
50
+ closesocket(udp);
51
+ WSACleanup();
47
52
  }
48
- コンパイルして送信開始
53
+ 私はVisual Studioを使用しているため、サイトのコードを少し変更しました
54
+ sendto(udp, (unsigned char*)data, sizeof data, 0, (struct sockaddr *)&addr, sizeof(addr));のところでエラーが出てしまいます。
49
55
 
50
- 受信側(Unity)
51
- UDPReceive.cs
52
- using System;
53
- using UnityEngine;
54
- using System.Collections;
55
- using System.Net;
56
- using System.Net.Sockets;
57
- using System.Threading;
58
56
 
59
- public class UDPReceive : MonoBehaviour
60
- {
61
- private const int DATA_LENGTH = 4;
62
- private const int DOUBLE_LENGTH = 8;
63
- private UdpClient udp;
64
- private Thread thread;
65
- private byte[] data;
66
- private double[] result = new double[DATA_LENGTH];
67
-
68
- void Start ()
69
- {
70
- udp = new UdpClient (20001);
71
- thread = new Thread (new ThreadStart (threadWork));
72
- thread.Start ();
73
- }
74
-
75
- void Update()
76
- {
77
- if (data != null)
78
- {
79
- Debug.LogFormat ("{0}, {1}, {2}, {3}", result[0], result[1], result[2], result[3]);
80
- }
81
- }
82
-
83
- void OnApplicationQuit()
84
- {
85
- udp.Close ();
86
- thread.Abort ();
87
- }
88
-
89
- void threadWork()
90
- {
91
- while(true)
92
- {
93
- IPEndPoint remoteEP = null;
94
- data = udp.Receive(ref remoteEP);
95
-
96
- for (int i = 0; i<DATA_LENGTH; i++)
97
- {
98
- result[i] = BitConverter.ToDouble(data, i * DOUBLE_LENGTH);
99
- }
100
- }
101
- }
102
- }
103
-
104
- 私はVisual Studioを使用しているため、上記の送信プログラムでは動きませんでした。Winsock2を使うということは調べたのですが、どこを変えればいいかわかりません。
105
-
106
57
  よろしくお願いします。