質問編集履歴

2

補足

2017/06/23 06:52

投稿

Asahi_1115
Asahi_1115

スコア13

test CHANGED
File without changes
test CHANGED
@@ -86,6 +86,10 @@
86
86
 
87
87
 
88
88
 
89
+ ※石を置くたびshow_plane()関数を実行して盤の内容を表示する
90
+
91
+
92
+
89
93
  - サーバ側
90
94
 
91
95
  ```define _CRT_SECURE_NO_WARNINGS

1

質問を書き直しました

2017/06/23 06:52

投稿

Asahi_1115
Asahi_1115

スコア13

test CHANGED
File without changes
test CHANGED
@@ -1,393 +1,399 @@
1
+ サーバとクライアント間で接続を行って、三目並べ(勝敗判定なし)を実行するプログラムを作ってます。接続まではできたのですが、二次元配列の使い方がわからず、下記のような実行結果までたどり着けません。どのように書き足せばよいのでしょうか。
2
+
3
+
4
+
5
+ <サーバ側>
6
+
7
+ クライアントからの接続待ち
8
+
1
- コード
9
+ 123
10
+
2
-
11
+ 1---
12
+
13
+ 2---
14
+
15
+ 3---
16
+
17
+ クライアントへデータを送信してください
18
+
19
+ 行ナンバー:1
20
+
21
+ 列ナンバー:1
22
+
23
+
24
+
25
+ 123
26
+
27
+ 1s--
28
+
29
+ 2---
30
+
31
+ 3---
32
+
33
+ クライアントからのデータ待ち
34
+
35
+ [1]クライアントからのデータ(行) = 2
36
+
37
+ [1]クライアントからのデータ(列) = 2
38
+
39
+
40
+
41
+ <クライアント側>
42
+
43
+
44
+
45
+ 123
46
+
47
+ 1---
48
+
49
+ 2---
50
+
51
+ 3---
52
+
53
+
54
+
55
+ サーバからの受信待ち
56
+
57
+ [1]サーバからのデータ(行) = 1
58
+
59
+ [1]サーバからのデータ(列) = 2
60
+
61
+
62
+
63
+ 123
64
+
65
+ 1s--
66
+
67
+ 2---
68
+
69
+ 3---
70
+
71
+ サーバへデータを送信してください
72
+
73
+ 行ナンバー:2
74
+
75
+ 列ナンバー:2
76
+
77
+
78
+
79
+ 123
80
+
81
+ 1s--
82
+
83
+ 2-c-
84
+
85
+ 3---
86
+
87
+
88
+
3
- ```サーバ
89
+ - サーバ側
4
-
90
+
5
- #define _CRT_SECURE_NO_WARNINGS
91
+ ```define _CRT_SECURE_NO_WARNINGS
6
-
92
+
7
- #include <stdio.h>
93
+ include <stdio.h>
8
-
94
+
9
- #include <winsock2.h>
95
+ include <winsock2.h>
10
-
96
+
11
- #define BUF_LEN 2//入出力バッファサイズ
97
+ define BUF_LEN 2//入出力バッファサイズ
12
98
 
13
99
 
14
100
 
15
101
  void show_plane(void);
16
102
 
17
- char plane[4][5] = {" 123","1---","2---","3---"};
103
+ char plane[4][5] = {" 123","1---","2---","3---"};
18
104
 
19
105
  int main()
20
106
 
21
- {
22
-
23
- WSADATA wsaData;
24
-
25
- SOCKET sock0;
26
-
27
- struct sockaddr_in addr;
28
-
29
- struct sockaddr_in client;
30
-
31
- int len;
32
-
33
- SOCKET sock;
34
-
35
-
36
-
37
- //char buf[BUF_LEN];//入出力バッファ
38
-
39
- int buf[BUF_LEN];//入出力バッファ
40
-
41
-
42
-
43
- // winsock2の初期化
44
-
45
- WSAStartup(MAKEWORD(2, 0), &wsaData);
46
-
47
-
48
-
49
- // ソケットの作成
50
-
51
- sock0 = socket(AF_INET, SOCK_STREAM, 0);
52
-
53
-
54
-
55
- // ソケットの設定(アドレス構造体の設定)
56
-
57
- addr.sin_family = AF_INET;//インターネットを使用する
58
-
59
- addr.sin_port = htons(12345);//サーバ(自分自身)のポート番号
60
-
61
- addr.sin_addr.S_un.S_addr = INADDR_ANY;//IPアドレスすべての値指定
62
-
63
-
64
-
65
- //ソケットのディスクリプタとアドレス構造体を結びつける
66
-
67
- bind(sock0, (struct sockaddr *)&addr, sizeof(addr));
68
-
69
-
70
-
71
- // TCPクライアントからの接続要求を待てる状態にする(待ちクライアント数指定)
72
-
73
- listen(sock0,1);
74
-
75
-
76
-
77
- // TCPクライアントからの接続要求を受け付ける
78
-
79
- printf("クライアントからの接続待ち\n");
80
-
81
- len = sizeof(client);
82
-
83
- sock = accept(sock0, (struct sockaddr *)&client, &len);
84
-
85
-
86
-
87
- //送受信処理
88
-
89
- int cnt = 1;
90
-
91
- char inputdata[4];
92
-
93
- do{
94
-
95
- printf("クライアントへデータを送信してください\n");
96
-
97
- memset(buf, 0, sizeof(buf));//送受信バッファ0クリア
98
-
99
-
100
-
101
- //キーボードから行列を入力
102
-
103
- printf("行ナンバー:");
104
-
105
- gets(inputdata);
106
-
107
- buf[0] = atoi(inputdata);
108
-
109
- printf("列ナンバー:");
110
-
111
- gets(inputdata);
112
-
113
- buf[1] = atoi(inputdata);
114
-
115
- send(sock, (char*)buf, sizeof(buf), 0);//送信 データint型配列だが通信はchar型で
116
-
117
- //(数値型はサイズがシステムで異なるので)
118
-
119
-
120
-
121
- printf("クライアントからのデータ待ち\n");
122
-
123
- memset(buf, 0, sizeof(buf));
124
-
125
- recv(sock, (char*)buf, sizeof(buf), 0);//受信 データint型配列だが通信はchar型で
126
-
127
- printf("[%d]クライアントからのデータ(行)= %d\n", cnt, buf[0]);
128
-
129
- printf("[%d]クライアントからのデータ(列)= %d\n", cnt, buf[1]);
130
-
131
-
132
-
133
- cnt++;
134
-
135
- } while (buf[0]!= 99);//クライアントから行99受信したら終了
136
-
137
-
138
-
139
- // TCPセッションの終了
140
-
141
- closesocket(sock);
142
-
143
-
144
-
145
- // winsock2の終了処理
146
-
147
- WSACleanup();
148
-
149
- return 0;
150
-
151
- }
152
-
153
- void show_plane(void){
154
-
155
- printf("\n");
156
-
157
- for(int i = 0; j < 4; i++){
158
-
159
-
160
-
161
- printf("%c",plane[i][j]);
162
-
163
- }
164
-
165
- printf("\n");
166
-
167
- }
168
-
169
- ---
170
-
171
- クライアント側
172
-
173
- #define _CRT_SECURE_NO_WARNINGS
174
-
175
- #define _WINSOCK_DEPRECATED_NO_WARNINGS
176
-
177
- #include <stdio.h>
178
-
179
- #include <winsock2.h>
180
-
181
- #define BUF_LEN 2//入出力バッファサイズ
107
+ {
108
+
109
+ WSADATA wsaData;
110
+
111
+ SOCKET sock0;
112
+
113
+ struct sockaddr_in addr;
114
+
115
+ struct sockaddr_in client;
116
+
117
+ int len;
118
+
119
+ SOCKET sock;
120
+
121
+
122
+
123
+ //char buf[BUF_LEN];//入出力バッファ
124
+
125
+ int buf[BUF_LEN];//入出力バッファ
126
+
127
+
128
+
129
+ // winsock2の初期化
130
+
131
+ WSAStartup(MAKEWORD(2, 0), &wsaData);
132
+
133
+
134
+
135
+ // ソケットの作成
136
+
137
+ sock0 = socket(AF_INET, SOCK_STREAM, 0);
138
+
139
+
140
+
141
+ // ソケットの設定(アドレス構造体の設定)
142
+
143
+ addr.sin_family = AF_INET;//インターネットを使用する
144
+
145
+ addr.sin_port = htons(12345);//サーバ(自分自身)のポート番号
146
+
147
+ addr.sin_addr.S_un.S_addr = INADDR_ANY;//IPアドレスすべての値指定
148
+
149
+
150
+
151
+ //ソケットのディスクリプタとアドレス構造体を結びつける
152
+
153
+ bind(sock0, (struct sockaddr *)&addr, sizeof(addr));
154
+
155
+
156
+
157
+ // TCPクライアントからの接続要求を待てる状態にする(待ちクライアント数指定)
158
+
159
+ listen(sock0,1);
160
+
161
+
162
+
163
+ // TCPクライアントからの接続要求を受け付ける
164
+
165
+ printf("クライアントからの接続待ち\n");
166
+
167
+ len = sizeof(client);
168
+
169
+ sock = accept(sock0, (struct sockaddr *)&client, &len);
170
+
171
+
172
+
173
+ //送受信処理
174
+
175
+ int cnt = 1;
176
+
177
+ char inputdata[4];
178
+
179
+ do{
180
+
181
+ printf("クライアントへデータを送信してください\n");
182
+
183
+ memset(buf, 0, sizeof(buf));//送受信バッファ0クリア
184
+
185
+
186
+
187
+ //キーボードから行列を入力
188
+
189
+ printf("行ナンバー:");
190
+
191
+ gets(inputdata);
192
+
193
+ buf[0] = atoi(inputdata);
194
+
195
+ printf("列ナンバー:");
196
+
197
+ gets(inputdata);
198
+
199
+ buf[1] = atoi(inputdata);
200
+
201
+ send(sock, (char*)buf, sizeof(buf), 0);//送信 データint型配列だが通信はchar型で
202
+
203
+ //(数値型はサイズがシステムで異なるので)
204
+
205
+
206
+
207
+ printf("クライアントからのデータ待ち\n");
208
+
209
+ memset(buf, 0, sizeof(buf));
210
+
211
+ recv(sock, (char*)buf, sizeof(buf), 0);//受信 データint型配列だが通信はchar型で
212
+
213
+ printf("[%d]クライアントからのデータ(行)= %d\n", cnt, buf[0]);
214
+
215
+ printf("[%d]クライアントからのデータ(列)= %d\n", cnt, buf[1]);
216
+
217
+
218
+
219
+ cnt++;
220
+
221
+ } while (buf[0]!= 99);//クライアントから行99受信したら終了
222
+
223
+
224
+
225
+ // TCPセッションの終了
226
+
227
+ closesocket(sock);
228
+
229
+
230
+
231
+ // winsock2の終了処理
232
+
233
+ WSACleanup();
234
+
235
+ return 0;
236
+
237
+ }
238
+
239
+ void show_plane(void){
240
+
241
+ printf("\n");
242
+
243
+ for(int i = 0; j < 4; i++){
244
+
245
+
246
+
247
+ printf("%c",plane[i][j]);
248
+
249
+ }
250
+
251
+ printf("\n");
252
+
253
+
254
+
255
+ }
256
+
257
+
258
+
259
+ ```
260
+
261
+ - クライアント側
262
+
263
+ ```efine _CRT_SECURE_NO_WARNINGS
264
+
265
+ define _WINSOCK_DEPRECATED_NO_WARNINGS
266
+
267
+ include <stdio.h>
268
+
269
+ include <winsock2.h>
270
+
271
+ define BUF_LEN 2//入出力バッファサイズ
182
272
 
183
273
 
184
274
 
185
275
  void show_plane(void);
186
276
 
187
- char plane[4][5] = {" 123","1---","2---","3---"};
277
+ char plane[4][5] = {" 123","1---","2---","3---"};
188
278
 
189
279
  int main()
190
280
 
191
- {
192
-
193
- WSADATA wsaData;
194
-
195
- struct sockaddr_in server;
196
-
197
- SOCKET sock;
198
-
199
- //char buf[BUF_LEN];//入出力バッファ
200
-
201
- int buf[BUF_LEN];//入出力バッファ
202
-
203
-
204
-
205
- // winsock2の初期化
206
-
207
- WSAStartup(MAKEWORD(2, 0), &wsaData);
208
-
209
-
210
-
211
- // ソケットの作成
212
-
213
- sock = socket(AF_INET, SOCK_STREAM, 0);
214
-
215
-
216
-
217
- // 接続先指定用アドレス構造体の準備
218
-
219
- server.sin_family = AF_INET;//インターネット使用
220
-
221
- server.sin_port = htons(12345);//接続先ポート番号
222
-
223
- server.sin_addr.S_un.S_addr = inet_addr("*.*.*.*");//接続先IPアドレス
224
-
225
-
226
-
227
- // サーバに接続
228
-
229
- connect(sock, (struct sockaddr *)&server, sizeof(server));
230
-
231
-
232
-
233
- //受信送信処理
234
-
235
- int cnt=1;
236
-
237
- char inputdata[4];
238
-
239
- do{
240
-
241
- memset(buf, 0, sizeof(buf));//送受信バッファ0クリア
242
-
243
- printf("サーバからのデータ受信待ち\n");
244
-
245
- recv(sock, (char*)buf, sizeof(buf), 0);//受信 データint型配列だが通信はchar型で
246
-
247
- printf("[%d]サーバからのデータ(行)= %d\n", cnt,buf[0]);
248
-
249
- printf("[%d]サーバからのデータ(列)= %d\n", cnt, buf[1]);
250
-
251
-
252
-
253
- printf("サーバへデータを送信してください\n");
254
-
255
- memset(buf, 0, sizeof(buf));//送受信バッファ0クリア
256
-
257
-
258
-
259
- //キーボードから行列を入力
260
-
261
- printf("行ナンバー:");
262
-
263
- gets(inputdata);
264
-
265
- buf[0] = atoi(inputdata);
266
-
267
- printf("列ナンバー:");
268
-
269
- gets(inputdata);
270
-
271
- buf[1] = atoi(inputdata);
272
-
273
- send(sock, (char*)buf, sizeof(buf), 0);;//送信 データint型配列だが通信はchar型で
274
-
275
- cnt++;
276
-
277
- } while (buf[0] != 99);//行99送信した場合、終了
278
-
279
- // TCPセッションの終了
280
-
281
- closesocket(sock);
282
-
283
-
284
-
285
- // winsock2の終了処理
286
-
287
- WSACleanup();
288
-
289
- return 0;
290
-
291
- }
292
-
293
- void show_plane(void){
294
-
295
- printf("\n");
296
-
297
- for(int i = 0; j < 4; i++){
298
-
299
-
300
-
301
- printf("%c",plane[i][j]);
302
-
303
- }
304
-
305
- printf("\n");
306
-
307
- }
308
-
309
-
310
-
311
- ---
312
-
313
- <サーバ側>
314
-
315
- クライアントからの接続待ち
316
-
317
- 123
318
-
319
- 1---
320
-
321
- 2---
322
-
323
- 3---
324
-
325
- クライアントへデータを送信してください
326
-
327
- 行ナンバー:1
328
-
329
- 列ナンバー:1
330
-
331
-
332
-
333
- 123
334
-
335
- 1s--
336
-
337
- 2---
338
-
339
- 3---
340
-
341
- クライアントからのデータ待ち
342
-
343
- [1]クライアントからのデータ(行) = 2
344
-
345
- [1]クライアントからのデータ(列) = 2
346
-
347
-
348
-
349
- <クライアント側>
350
-
351
-
352
-
353
- 123
354
-
355
- 1---
356
-
357
- 2---
358
-
359
- 3---
360
-
361
-
362
-
363
- サーバからの受信待ち
364
-
365
- [1]サーバからのデータ(行) = 1
366
-
367
- [1]サーバからのデータ(列) = 2
368
-
369
-
370
-
371
- 123
372
-
373
- 1s--
374
-
375
- 2---
376
-
377
- 3---
378
-
379
- サーバへデータを送信してください
380
-
381
- 行ナンバー:2
382
-
383
- 列ナンバー:2
384
-
385
-
386
-
387
- 123
388
-
389
- 1s--
390
-
391
- 2-c-
392
-
393
- 3---
281
+ {
282
+
283
+ WSADATA wsaData;
284
+
285
+ struct sockaddr_in server;
286
+
287
+ SOCKET sock;
288
+
289
+ //char buf[BUF_LEN];//入出力バッファ
290
+
291
+ int buf[BUF_LEN];//入出力バッファ
292
+
293
+
294
+
295
+ // winsock2の初期化
296
+
297
+ WSAStartup(MAKEWORD(2, 0), &wsaData);
298
+
299
+
300
+
301
+ // ソケットの作成
302
+
303
+ sock = socket(AF_INET, SOCK_STREAM, 0);
304
+
305
+
306
+
307
+ // 接続先指定用アドレス構造体の準備
308
+
309
+ server.sin_family = AF_INET;//インターネット使用
310
+
311
+ server.sin_port = htons(12345);//接続先ポート番号
312
+
313
+ server.sin_addr.S_un.S_addr = inet_addr("*.*.*.*");//接続先IPアドレス
314
+
315
+
316
+
317
+ // サーバに接続
318
+
319
+ connect(sock, (struct sockaddr *)&server, sizeof(server));
320
+
321
+
322
+
323
+ //受信送信処理
324
+
325
+ int cnt=1;
326
+
327
+ char inputdata[4];
328
+
329
+ do{
330
+
331
+ memset(buf, 0, sizeof(buf));//送受信バッファ0クリア
332
+
333
+ printf("サーバからのデータ受信待ち\n");
334
+
335
+ recv(sock, (char*)buf, sizeof(buf), 0);//受信 データint型配列だが通信はchar型で
336
+
337
+ printf("[%d]サーバからのデータ(行)= %d\n", cnt,buf[0]);
338
+
339
+ printf("[%d]サーバからのデータ(列)= %d\n", cnt, buf[1]);
340
+
341
+
342
+
343
+ printf("サーバへデータを送信してください\n");
344
+
345
+ memset(buf, 0, sizeof(buf));//送受信バッファ0クリア
346
+
347
+
348
+
349
+ //キーボードから行列を入力
350
+
351
+ printf("行ナンバー:");
352
+
353
+ gets(inputdata);
354
+
355
+ buf[0] = atoi(inputdata);
356
+
357
+ printf("列ナンバー:");
358
+
359
+ gets(inputdata);
360
+
361
+ buf[1] = atoi(inputdata);
362
+
363
+ send(sock, (char*)buf, sizeof(buf), 0);;//送信 データint型配列だが通信はchar型で
364
+
365
+ cnt++;
366
+
367
+ } while (buf[0] != 99);//行99送信した場合、終了
368
+
369
+ // TCPセッションの終了
370
+
371
+ closesocket(sock);
372
+
373
+
374
+
375
+ // winsock2の終了処理
376
+
377
+ WSACleanup();
378
+
379
+ return 0;
380
+
381
+ }
382
+
383
+ void show_plane(void){
384
+
385
+ printf("\n");
386
+
387
+ for(int i = 0; j < 4; i++){
388
+
389
+
390
+
391
+ printf("%c",plane[i][j]);
392
+
393
+ }
394
+
395
+ printf("\n");
396
+
397
+ }
398
+
399
+ ```