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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

2回答

9766閲覧

C/C++ のsocket.ioについて

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2015/09/04 07:40

C言語のソケットプログラムについて、read/writeを使用してソケットから読み込みその値を使用したく考えています。
そこでプログラミングをしたところgcc コンパイラで
implicit declaration of function 'close' is invalid in C99
[-Wimplicit-function-declaration]

という警告文が出ました
さらに拡張子を.cppに変更するとerrorになってしまいました。
原因がわからず困っています、お力をお貸しください
[server.cpp]

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/fcntl.h>
#include <netinet/in.h>

int main(int argc, char** argv)
{
int sd;
int acc_sd;
struct sockaddr_in addr;

socklen_t sin_size = sizeof(struct sockaddr_in); struct sockaddr_in from_addr; char buf[2048];

// 受信バッファの初期化
memset(buf, 0, sizeof(buf));

// IPv4 TCP のソケットを作成 if((sd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { perror("socket"); return -1; } // 待ち受けるIPとポート番号を設定 addr.sin_family = AF_INET; addr.sin_port = htons(22222); addr.sin_addr.s_addr = INADDR_ANY; // バインドする if(bind(sd, (struct sockaddr *)&addr, sizeof(addr)) < 0) { perror("bind"); return -1; } // パケット受信待ち状態とする // 待ちうけキューを10としている if(listen(sd, 10) < 0) { perror("listen"); return -1; } // クライアントからコネクト要求が来るまで停止する // 以降、サーバ側は acc_sd を使ってパケットの送受信を行う if((acc_sd = accept(sd, (struct sockaddr *)&from_addr, &sin_size)) < 0) { perror("accept"); return -1; } // パケット受信。パケットが到着するまでブロック while(1){ read(acc_sd,buf,sizeof(buf)); printf("%s",buf); write(acc_sd,buf,sizeof(buf)); } // パケット送受信用ソケットのクローズ close(acc_sd); // 接続要求待ち受け用ソケットをクローズ close(sd); // 受信データの出力 printf("%s\n", buf); return 0;

}

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

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

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

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

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

guest

回答2

0

closeを宣言してるヘッダunistd.hがincludeされていません。下記を最初の方に追加してください。

C

1#include <unistd.h>

あと、cppだとerror似なるとのことですが、私の環境では上記を足したあとはコンパイルできました。
エラーメッセージとかをは何がありますか?

投稿2015/09/04 10:54

raccy

総合スコア21735

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

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

0

Cはあまり詳しくないので引用ですが、以下を確認してみてください。

Have you included right headers? You need the following:

#include <fcntl.h> // for open #include <unistd.h> // for close

http://stackoverflow.com/questions/19472546/implicit-declaration-of-function-close

投稿2015/09/04 08:27

edo_m18

総合スコア2283

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問