タグ

UDPに関するmsdyのブックマーク (15)

  • UDPでマルチキャストを使う:Geekなぺーじ

    マルチキャスト送信サンプル まずは、マルチキャストを送信するサンプルを以下に示します。 このサンプルではwinsock2.hだけでなくws2tcpip.hというファイルをincludeしているので注意してください。 ws2tcpip.hでIP_MULTICAST_IFやstruct ip_mreqなどが宣言されています。 #include <stdio.h> #include <winsock2.h> #include <ws2tcpip.h> int main() { WSAData wsaData; SOCKET sock; struct sockaddr_in addr; DWORD ipaddr; WSAStartup(MAKEWORD(2,0), &wsaData); sock = socket(AF_INET, SOCK_DGRAM, 0); addr.sin_family =

  • Geekなぺーじ : selectを使う

    普通の状態では、readやrecvfromはデータが受信できるまでブロッキングします。 ソケットを一つしか利用していない場合にはブロッキングは非常に便利なのですが、ソケットが複数になると困ってしまいます。 複数のソケットを扱うとき、片方のソケットでブロッキングしたままになってしまうと他のソケットにデータが到着しても受信が出来なくなってしまいます。 そのため、複数のソケットを扱っていると、どのソケットからデータが受信可能か知りたくなります。 ブロッキングとは、関数が返ってこない事を表します。 例えば、readはデータを受信して関数が戻ってきます。 言い方を変えると、データを受信するまでブロックしています。 readやrecvfromをブロッキングしないノンブロッキング方式で使う事も可能ですが、ここではブロッキング方式のまま使う方法を説明します。 そのような機能を提供するのがselectです。

  • インターフェースのIPアドレスを設定する:Geekなぺーじ

    ネットワークプログラミングを行っていると、自分のネットワークインターフェース(NIC)に設定されているIPアドレスを変えたくなる事があると思います。 ここでは、Linuxでインターフェースに設定されているIPアドレスを変更する方法を説明したいと思います。 単純なIPアドレス変更プログラム Linuxでの簡単なIPアドレス変更プログラムのサンプルを以下に示します。 このサンプルを実行するとIPアドレスが変わってしまうのでご注意下さい。 このサンプルはネットワークインターフェースのIPアドレスを変更できる権限(rootなど)を持ったユーザとして実行しないと失敗します。 #include <stdio.h> #include <string.h> /* for strncpy */ #include <sys/types.h> #include <sys/socket.h> #include <

  • データグラムソケット

    ここでは上から下方向に時系列順に書かれています。 受信プログラムがrecvfrom()を実行すると、データが到着するまでブロックし (プログラムは停止して待ち)ます。 送信プログラムがsendto()で送信したデータが到着した時点で 受信プログラムがbind()が終了していなければ、 送ったデータは捨てられます。それ以後であれば、recvfrom()まで OSが保存しておいてくれます。 以下にサーバとクライアントが接続するさいにふむ手順の考え方について、 以下に説明します。 受信プログラム データグラムソケットの処理は私書箱宛の手紙を届けることに似ているので、 以下ではその例えを用いて概念を説明します。 エンドポイントの作成

  • WindowsAPI Programming

    WindowsAPI Programming  第3章 〜ソケット通信 その(3) 〜 授業を観たい(Flash版授業:概要 操作 詳細) II. ストリームソケットの通信手順(TCPプロトコル) <TCP/IPの概要> ストリームソケットの通信手順は以下の図の通りです。この手順はUNIXでもWindowsでも一緒です。また、ここで用いられる各関数はUNIXの場合socket.h、Windowsの場合winsock.hで型宣言されており、引数や戻り値も共通となっています。 ではまず,ストリームソケット(TCP/IP)のイメージを述べておきます。ストリームソケットは電話式コミュニケーションと覚えておくと便利です。つまり電話になぞらえて設計した通信方式です。通常,電話でのコミュニケーションに必要なのは電話回線に繋がれている受話器というハードウェアが2つ(自分の分と相手の分)と,

  • ソケット通信メモ(Hishidama's TCP/UDP Socket Memo)

    TCPソケット サーバータイプとクライアントタイプの両方のアプリケーションを作らないといけないなら、サーバータイプから作るべきだろう。 (クライアントタイプだけ先に作っても動かせないから。まぁサーバータイプだけ動かしても、待ってるだけであまり意味無いけど(苦笑)) でも仕組みはクライアントタイプの方が簡単。 TCPを使う場合は、通信の最初にコネクションの確立を行う必要がある。 サーバーでlisten・accept、クライアントでconnectが成功すればコネクションが確立したことになる。 どのポート番号を使うかについては、サーバー側はアプリケーションの作成者が決める必要がある。[/2007-06-16] クライアント側のポート番号は、ソケットライブラリがそのマシンで使っていない番号を自動的に割り振ってくれるので、気にしなくてよい。 IANAの基準では、1~1023は「よく知られたポート(w

  • Manpage of RECV

    Section: Linux Programmer's Manual (2) Updated: 2008-07-14 Index JM Home Page roff page 名前 recv, recvfrom, recvmsg - ソケットからメッセージを受け取る 書式 #include <sys/types.h> #include <sys/socket.h> ssize_t recv(int s, void *buf, size_t len, int flags); ssize_t recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen); ssize_t recvmsg(int s, struct msghdr *msg, int flags); 説明 r

  • Manpage of SEND

    Section: Linux Programmer's Manual (2) Updated: 2008-07-14 Index JM Home Page roff page 名前 send, sendto, sendmsg - ソケットへメッセージを送る 書式 #include <sys/types.h> #include <sys/socket.h> ssize_t send(int s, const void *buf, size_t len, int flags); ssize_t sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); ssize_t sendmsg(int s, const struct msghdr *msg, int

  • Manpage of BIND

    Section: Linux Programmer's Manual (2) Updated: 2007-12-28 Index JM Home Page roff page 名前 bind - ソケットに名前をつける 書式 #include <sys/types.h> /* 「注意」参照 */ #include <sys/socket.h> int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); 説明 socket(2) でソケットが作成されたとき、そのソケットは名前空間 (アドレス・ファミリー) に 存在するが、アドレスは割り当てられていない。 bind() は、ファイルディスクリプタ sockfd で参照されるソケットに addr で指定されたアドレスを割り当てる。 addrlen には addr が

  • Manpage of SOCKET

    ソケットは type で指定される型を持ち、それは通信方式(semantics)を指定する。 定義されている型は現在以下の通り。 SOCK_STREAM 順序性と信頼性があり、双方向の、接続された バイト・ストリーム(byte stream)を提供する。 帯域外(out-of-band)データ転送メカニズムもサポートされる。 SOCK_DGRAM データグラム(接続、信頼性無し、固定最大長メッセージ) をサポートする。 SOCK_SEQPACKET 固定最大長のデータグラム転送パスに基づいた順序性、信頼性のある 双方向の接続に基づいた通信を提供する。受け取り側ではそれぞれの入力 システム・コールでパケット全体を読み取ることが要求される。 SOCK_RAW 生のネットワーク・プロトコルへのアクセスを提供する。 SOCK_RDM 信頼性はあるが、順序は保証しないデータグラム層を提供する。 SO

  • Manpage of UDP

    Section: Linux Programmer's Manual (7) Updated: 2008-08-08 Index JM Home Page roff page 名前 udp - IPv4 の ユーザーデータグラムプロトコル 書式 #include <sys/socket.h> #include <netinet/in.h> udp_socket = socket(AF_INET, SOCK_DGRAM, 0); 説明 これは RFC 768 で記述されている User Datagram Protocol の実装である。 UDP はコネクションレスの、信頼性の低いデータパケットサービスである。 パケットは到着前に並び替えられたり複製されたりする。 UDP は転送エラーを検出するためにチェックサムを生成・チェックする。 UDP ソケットが生成されるとき、 ローカルアドレスやリモ

  • UDP を使ってみよう (1)

    UDP とは UDP とは、User Datagram Protocol の略です。 TCP (Transmission Control Protocol) は信頼性を提供するプロトコルですが、 UDP はそうではありません。 これまで HTTP・POP3・FTP などのプロトコルを使ってきましたが、 これらは全て TCP を利用していました。送信したいときは print SOCKET "hoge\n"; と書き、受信したいときは $buf = <SOCKET>; としていました。しかし陰では OS が TCP を使って信頼性を保証するためのさまざまなチェックが行なっていたのです。 OS はいったい何をやっていてくれたのでしょうか? それは以下のようなことです。 データの送り先が存在するかどうかのチェック データ化けの修正 データの順序の保証 データ損失時の再送信 相手がデータを受信したか

    msdy
    msdy 2008/04/14
  • UDP - 意味・説明・解説 : ASCII.jpデジタル用語辞典

    msdy
    msdy 2008/04/14
  • User Datagram Protocol - Wikipedia

    User Datagram Protocol(ユーザ データグラム プロトコル、UDP)はIPネットワーク上のアプリケーション間データグラム送信を実現する通信プロトコルである[1]。 概要[編集] UDPはインターネットを始めとしたInternet Protocolネットワーク上で利用される通信プロトコルである[2]。ホスト間通信を担うIP上でアプリケーション間通信を可能にする[3]。通信はデータグラム方式、すなわち到達保証・流量制御・順序制御をせず、データグラムをステートレス・コネクションレスに相手側へと送信する。またブロードキャストとマルチキャストをサポートしている[4]。 デイヴィッド・P・リード(英語版)が1980年に設計し、RFC 768 で定義した(STD番号: 6)。非常にシンプルに設計されており公式仕様のRFC 768はわずか3ページである。インターネット・プロトコル・スイ

  • Geekなぺーじ : UDPを使う

    UDPとは UDPはデータが宛先に届いたかどうかをUDPは関知しないため、TCPと異なりデータの到着を保障しません。 そのため、UDPを使った通信を行うプログラムを書く場合には、パケットがネットワークの途中で消えてしまうことも想定しなくてはなりません。 このような制約がUDPにはあるため、確実にデータを届けたいアプリケーションではTCPを使うのが一般的です。 このように書くとUDPは使いにくいだけに思えますが、利点もあります。 複数の相手に同時にデータを送信できる(ブロードキャスト、マルチキャスト) TCPよりもリアルタイム性が高い まず、第一の利点として複数の相手に同時にデータ送信ができる事が挙げられます。 IPの通信形態には、ユニキャスト、ブロードキャスト、マルチキャストの3種類があります。 (ただし、IPv6にはブロードキャストはありません。) TCPでは、1対1の通信しかできないの

  • 1