ネットワークプログラミングをテーマにまとめています。ネットワークプログラミングの解説に加え、C言語とJavaプログラミングの補足やC言語とJavaでソケット通信するサンプルプログラムなども紹介しています。
このページの目次です。
1. ネットワークプログラミングとは
2. ソケット通信
3. ソケットプログラミングの基礎知識
4. C言語のサーバのサンプルプログラム
5. JavaとC言語のプログラムでソケット通信するサンプルプログラム
ネットワークプログラミングは、ネットワークを利用したプログラムの作成を目的としたプログラミングです。
ネットワークを使用した通信はルータ、FW、コンピュータのOSなどさまざまな構成要素が関係しますが、OSI基本参照モデルで玉ねぎのように規約が階層構造に決められており、各階層がカプセル化という概念で隠ぺいされています。 プログラミングで使用するのはOSの提供するネットワークインタフェース、ソケットになり、ネットワークプログラミングといった場合は、一般的にソケットを使用したプログラミングのことをいいます。
コンピュータ同士が通信を行う際、同じルール(規約)でやり取りする必要があります。 またアプリケーションだけでなくハードウェア各種も関係していて、ルール(規約)は7階層に整理されて効率的に通信が行えるようになっています。 この7階層のルールをOSI基本参照モデルといいます。
規約は玉ねぎのように構成されており、上位の階層はカプセル化されており、同じ階層だけ気にして通信が行えるようになっています。 データはパケットと呼ばれる小さな塊に分割されて送られます。
OSI基本参照モデルの7階層と対比しながら通信プロトコルについてをまとめていきます。
プログラム同士のネットワークを使用した通信には必ず入口と出口がありますね。 その入口と出口に当たるのがソケットで、そのソケットを使用した通信を「ソケット通信」と呼びます。 ソケット通信について解説していきます。
ソケットとは、BSD系UNIXを起源とするC言語のAPIです。 C言語によるアプリケーション開発でのプロセス間通信、特にコンピュータネットワークに関するライブラリです。
ソケット通信では、下位にネットワーク層のプロトコルであるIPプロトコル、その上のトランスポート層のプロトコルであるTCPもしくはUDPというプロトコルで通信を行います。
TCPの上層のアプリケーション層のプロトコルもあります。 独自に決めることも多いですが、Webで使われるHTTP、メールで使われるSMTPやPOP、ファイル転送で使うFTPなどのプロトコルが有名です。
一般的なソケットの型として、ストリームソケットとデータグラムソケットが挙げられます。
ストリームソケットは、誰かと電話で話をするときのような、信頼性の高い双方向通信を提供する型です。
データグラムソケットは、手紙のように一方通行通信を提供する型です。
TCPは、ソケットの型として、ストリームソケットの使用し、UDPはデータグラムソケットを使用します。
ソケットプログラミングの基礎知識についてふれていきます。
前提としてC言語の基礎知識が必要です。
このページは、C・C++言語についての情報を掲載しています。
ソケットインタフェースについて解説していきます。
ソケットは、起源を強調してBSDソケット、バークレーソケットなどとも呼ばれ、Berkeley Sockets APIがスタンダードでUNIXやLinxではこれを使用します。 ただし、WindowsはWinSockと呼ばれるプログラミングインタフェースが実装されており、Windowsではこちらを使用するのが一般的です。
バークレーソケットのAPIの例です。
API | 説明 |
---|---|
socket() | ソケットを作成する |
accept() | ソケットへの接続を待つ |
bind() | ソケットに名前を付ける |
connect() | ソケットの接続を行う |
close() | ソケットを閉じる |
WinSockのAPIの例です。
API | 説明 |
---|---|
closesocket() | ソケットを閉じる |
WSAStartup() | WinSockの使用を開始する |
WSACleanup() | WinSockの使用を終了する |
WSAGetLastError() | ソケット関連のエラーコードを取得する |
WSASocket() | ソケットを作成する |
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 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!!」と応答が返ってきます。
JavaとC言語のプログラムでソケット通信するサンプルプログラムです。
サンプルではJavaのプログラムが登場します。
このページは、Java言語についての情報を掲載しています。
Javaのクライアント(Windows)からCのサーバ(Linux)に接続して、「Hello World!!」という電文を受信して クライアント側に表示するプログラムの簡単なサンプルプログラムです。
スポンサーリンク
サイト内のページ
言語
C・C++
/HTML
/Java
/JavaScript
/PHP
/シェルスクリプト
開発環境
Ant
/Burp
/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インフラセキュリティ
公開サーバーのセキュリティ
SI
ホームページの作り方
スポンサーリンク
関連サイト内検索ツール
zealseedsおよび関連サイト内のページが検索できます。
IPアドレス確認ツール
あなたのグローバルIPアドレスは以下です。
18.118.154.237
HTMLの表示色確認ツール
パスワード生成ツール
文字数のプルダウンを選択して、取得ボタンを押すと「a~z、A~Z、0~9」の文字を ランダムに組み合わせた文字列が表示されます。
ここに生成されます。
スポンサーリンク
Copyright (C) 2007-2024 zealseeds. All Rights Reserved. Loarding…