前提・実現したいこと
while(1)文の中にwhile(1)文があるとプログラムの流れ的にはどのように動いているのでしょうか。
該当のソースコード
C++
1// サーバ側 WinSock2 2 3 4 5#include <stdio.h> 6#include <winsock2.h> 7#include <ws2tcpip.h> 8#include <iostream> 9#include <stdlib.h> 10#define snprintf _snprintf 11int main() { 12 // ポート番号 13 int port_number = 12345; 14 15 // Windows Sockets仕様に関する情報を格納する構造体 16 WSADATA wsa_data; 17 18 // WinSockの初期化処理(Version 2.0) 19 if (WSAStartup(MAKEWORD(2, 0), &wsa_data) != 0) { 20 std::cerr << "Winsockの初期化失敗(WSAStartup)" << std::endl; 21 } 22 23 // サーバ側ソケット作成 24 int src_socket; 25 26 27 28 // sockaddr_in構造体の作成とポート番号、IPタイプの入力 29 struct sockaddr_in src_addr; 30 memset(&src_addr, 0, sizeof(src_addr)); 31 src_addr.sin_port = htons(port_number); 32 src_addr.sin_family = AF_INET; 33 src_addr.sin_addr.s_addr = htonl(INADDR_ANY); 34 35 36 // AF_INETはipv4のIPプロトコル & SOCK_STREAMはTCPプロトコル 37 src_socket = socket(AF_INET, SOCK_STREAM, 0); 38 39 40 // サーバ側のソケットを特定のIPアドレスとポートに紐付ける 41 bind(src_socket, (struct sockaddr *) &src_addr, sizeof(src_addr)); 42 43 44 // クライアント側のソケット設定 45 int dst_socket; 46 struct sockaddr_in dst_addr; 47 int dst_addr_size = sizeof(dst_addr); 48 49 50 // 接続の待受を開始する 51 listen(src_socket, 1); 52 53 54 // 送受信に使用するバッファ 55 char recv_buf1[256]; 56 char send_buf[256]; 57 58 59 // クライアントからの接続待ちループ関数 60 while (1) { 61 // クライアントからの接続を受信する 62 dst_socket = accept(src_socket, (struct sockaddr *) &dst_addr, &dst_addr_size); 63 64 // 接続後の処理 65 while (1) { 66 int status; 67 float a; 68 69 //パケットの受信(recvは成功すると受信したデータのバイト数を返却。切断で0、失敗で-1が返却される 70 int recv1_result = recv(dst_socket, recv_buf1, sizeof(char) * 256, 0); 71 if (recv1_result == 0 || recv1_result == -1) { 72 status = closesocket(dst_socket); break; 73 } 74 a = atof(recv_buf1); 75 snprintf(send_buf, 256, "%+011.6f", a); 76 printf("%+011.6f\n",a); 77 78 // 結果を格納したパケットの送信 79 send(dst_socket, send_buf, sizeof(char) * 256, 0); 80 } 81 } 82 83 // WinSockの終了処理 84 WSACleanup(); 85 return 0; 86 87}
補足情報(FW/ツールのバージョンなど)
visual studio2012
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。