トップ ITインフラ ネットワーク プログラミング

ネットワークプログラミング―C言語とJavaでソケット通信するサンプルなど

ネットワークプログラミングをテーマにまとめています。ネットワークプログラミングの解説に加え、C言語とJavaプログラミングの補足やC言語とJavaでソケット通信するサンプルプログラムなども紹介しています。

▲記事トップへ

目次

このページの目次です。

1. ネットワークプログラミングとは
2. ソケット通信
3. ソケットプログラミングの基礎知識
4. C言語のサーバのサンプルプログラム
5. JavaとC言語のプログラムでソケット通信するサンプルプログラム

更新履歴

1. ネットワークプログラミングとは

ネットワークプログラミングは、ネットワークを利用したプログラムの作成を目的としたプログラミングです。

ソケットを使用したプログラミング

ネットワークを使用した通信はルータ、FW、コンピュータのOSなどさまざまな構成要素が関係しますが、OSI基本参照モデルで玉ねぎのように規約が階層構造に決められており、各階層がカプセル化という概念で隠ぺいされています。 プログラミングで使用するのはOSの提供するネットワークインタフェース、ソケットになり、ネットワークプログラミングといった場合は、一般的にソケットを使用したプログラミングのことをいいます。

OSI基本参照モデル

コンピュータ同士が通信を行う際、同じルール(規約)でやり取りする必要があります。 またアプリケーションだけでなくハードウェア各種も関係していて、ルール(規約)は7階層に整理されて効率的に通信が行えるようになっています。 この7階層のルールをOSI基本参照モデルといいます。

規約は玉ねぎのように構成されており、上位の階層はカプセル化されており、同じ階層だけ気にして通信が行えるようになっています。 データはパケットと呼ばれる小さな塊に分割されて送られます。

参考)通信プロトコル

OSI基本参照モデルの7階層と対比しながら通信プロトコルについてをまとめていきます。

詳細

2. ソケット通信

プログラム同士のネットワークを使用した通信には必ず入口と出口がありますね。 その入口と出口に当たるのがソケットで、そのソケットを使用した通信を「ソケット通信」と呼びます。 ソケット通信について解説していきます。

ソケットとは

ソケットとは、BSD系UNIXを起源とするC言語のAPIです。 C言語によるアプリケーション開発でのプロセス間通信、特にコンピュータネットワークに関するライブラリです。

ソケット通信で使われるプロトコル

ソケット通信では、下位にネットワーク層のプロトコルであるIPプロトコル、その上のトランスポート層のプロトコルであるTCPもしくはUDPというプロトコルで通信を行います。

TCPの上層のアプリケーション層のプロトコルもあります。 独自に決めることも多いですが、Webで使われるHTTP、メールで使われるSMTPやPOP、ファイル転送で使うFTPなどのプロトコルが有名です。

ソケットの型

一般的なソケットの型として、ストリームソケットとデータグラムソケットが挙げられます。

ストリームソケット

ストリームソケットは、誰かと電話で話をするときのような、信頼性の高い双方向通信を提供する型です。

データグラムソケット

データグラムソケットは、手紙のように一方通行通信を提供する型です。

TCPとUDPのソケットの型

TCPは、ソケットの型として、ストリームソケットの使用し、UDPはデータグラムソケットを使用します。

3. ソケットプログラミングの基礎知識

ソケットプログラミングの基礎知識についてふれていきます。

C言語

前提としてC言語の基礎知識が必要です。

知識の補足のための参考

ソケットインタフェース

ソケットインタフェースについて解説していきます。

UNIXとLinuxはバークレーソケット、WindowsはWinSock

ソケットは、起源を強調してBSDソケット、バークレーソケットなどとも呼ばれ、Berkeley Sockets APIがスタンダードでUNIXやLinxではこれを使用します。 ただし、WindowsはWinSockと呼ばれるプログラミングインタフェースが実装されており、Windowsではこちらを使用するのが一般的です。

バークレーソケット

バークレーソケットのAPIの例です。

API説明
socket()ソケットを作成する
accept()ソケットへの接続を待つ
bind()ソケットに名前を付ける
connect()ソケットの接続を行う
close()ソケットを閉じる

WinSock

WinSockのAPIの例です。

API説明
closesocket()ソケットを閉じる
WSAStartup()WinSockの使用を開始する
WSACleanup()WinSockの使用を終了する
WSAGetLastError()ソケット関連のエラーコードを取得する
WSASocket()ソケットを作成する

4. C言語のサーバのサンプルプログラム

C言語のサーバのサンプルプログラムです。

サンプルプログラム(server.c)

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

#define PORT 12345

int main() {

    // ソケット作成
    int sockOfLiten = socket(AF_INET, SOCK_STREAM, 0);

    // ソケットにアドレスとポートをマッピングする
    struct sockaddr_in addrOfSv;
    addrOfSv.sin_family = AF_INET;
    addrOfSv.sin_port = htons(PORT);
    addrOfSv.sin_addr.s_addr = INADDR_ANY;
    bind(sockOfLiten, (struct sockaddr *) &addrOfSv, sizeof(addrOfSv));

    // ポートをListenする
    listen(sockOfLiten, SOMAXCONN);

    // 接続要求を受け付ける
    struct sockaddr_in addrOfCl;
    int len = sizeof(addrOfCl);
    int sockOfCon = accept(sockOfLiten, (struct sockaddr *)&addrOfCl, &len);

    // Listeningソケットを閉じる
    close(sockOfLiten);

    // データを送信する
    send(sockOfCon, "Hello World!!\n", 15, 0);

    // Connectionソケットを閉じる
    close(sockOfCon);

    return 0;
}

コンパイル

ここではgccを使用してコンパイルする例を示します。

$ gcc server.c
$ ls
a.out  server.c

実行

まずはじめに、サーバプログラムをを起動します。

$ ./a.out

動作確認

telnetなどでサンプルプログラムにアクセスすると動作確認を行えます。

telnetで接続する例

telnetコマンドで接続する例です。

$ telnet localhost 12345
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Hello World!!
Connection closed by foreign host.

サンプルプログラムのサーバから「Hello World!!」と応答が返ってきます。

5. JavaとC言語のプログラムでソケット通信するサンプルプログラム

JavaとC言語のプログラムでソケット通信するサンプルプログラムです。

Java

サンプルではJavaのプログラムが登場します。

知識の補足のための参考

Java言語とC言語のプログラムで通信する例

Javaのクライアント(Windows)からCのサーバ(Linux)に接続して、「Hello World!!」という電文を受信して クライアント側に表示するプログラムの簡単なサンプルプログラムです。

詳細

更新履歴

戻る

スポンサーリンク

サイト内のページ

言語
C・C++ /HTML /Java /JavaScript /PHP /シェルスクリプト

開発環境
Ant /Eclipse /Fiddler /gcc /gdb /Git /g++ /JDK /JMeter /JUnit /Teraterm /ZAP

技術・仕様
Ajax /CORBA /Jakarta EE(旧称J2EE、Java EE) /JNI

ライブラリ/Framework/CMS
bootstrap /jQuery /FuelPHP /Lucene /MyBatis /Seasar2 /Spring /Struts /WordPress

Web API
Google Maps

ITインフラOSとミドルウェア
Linux /Windows /シェル
ActiveMQ /Tomcat /MariaDB /MySQL /Nagios /Redis /Solr

ITインフラサーバー
公開Webサーバー

ITインフラネットワーク
プログラミング /構築

ITインフラセキュリティ
公開サーバーのセキュリティ

PC製品
ZOTAC

SI
ホームページの作り方

その他
IT用語 /ITスキル体系

スポンサーリンク

関連サイト内検索ツール

zealseedsおよび関連サイト内のページが検索できます。

IPアドレス確認ツール

あなたのグローバルIPアドレスは以下です。

34.239.147.7

HTMLの表示色確認ツール

パスワード生成ツール

文字数のプルダウンを選択して、取得ボタンを押すと「a~z、A~Z、0~9」の文字を ランダムに組み合わせた文字列が表示されます。

ここに生成されます。

スポンサーリンク