mones2/22.ネットワークサーバ/04.uIPのサーバーを作ろう簡単なWrite


Top / mones2 / 22.ネットワークサーバ / 04.uIPのサーバーを作ろう簡単なWrite

これは何か

uIPを利用して特定IPアドレス・portに送信を行う実験です。

成果

送信がうまく行ってない
送信がうまく行ってない
送信できた未整理

流れ

NetServerを経由してのパケットの送信です。
 
uIP上でのパケット送信には2種類あって
 
    * パケット受信ループからそのコネクションに対してパケット送信
    * コネクションをオープンして送信
 
 
前者の場合はWebサーバーが動いたときに検証済みだったのですが、後者を今日試してみたところ動きませんでした。
 
http://www.sics.se/~adam/uip/uip-0.9-refman/main.htmlにあるドキュメントによれば、
 
   u16_t ipaddr[2];
   uip_ipaddr(ipaddr, 192,168,0,1);
   uip_connect(ipaddr, HTONS(80));
 
のように接続しておいて、アプリケーションのイベントループで
 
   if(uip_connected() || uip_rexmit()) {
      uip_send((volatile u8_t*)"GET /file  HTTP/1.0\r\nServer:192.168.100.2\r\n\r\n", 48);
 
このように接続が確立された状態であるときにuip_sendすればよいことになっています。
 
これをやってみたのですがぜんぜん動かなくてソースをいろいろいじって見て分かりました。
 
main.cでメインループがあり、ループの一番最初にデバイスからreadしています。
 
    while(1) {
        uip_len = pcapdev_read();
 
そしてそこのコメントをちゃんと読むと
 
    /* Let the pcapdev network device driver read an entire IP packet
 
    into the uip_buf. If it must wait for more than 0.5 seconds, it
 
    will return with the return value 0. If so, we know that it is
 
    time to call upon the uip_periodic(). Otherwise, the pcapdev has
 
    received an IP packet that is to be processed by uIP. */
 
今見れば、一目瞭然なのですが、pcapdev_readがデータ受信するまでブロックしていたらその先に行かない・・・orz
 
というわけでWinPcapを利用してタイムアウトつきで受信するように変えなければいけないようです。
 
今日はここまで

続き

WinPcapを利用したデバイスドライバがread時にブロックしているのがだめだということが分かった。
pcap_open_liveの引数でタイムアウトを1msにして、readでタイムアウト時は0を返すようにしたら送信がうまくいくようになった。
 
 
その後、べた書きであれこれ整理したら、簡単なWebクライアントができた。
これは、サーバー内に実装されたべた書きなので、サーバーがAPIを提供しこれと同じ機能のものが、サーバー外で実装できなければならない。
 
 
uIPのイベントループはuip_flagsの状態を調べるマクロ(uip_connected, uip_ackedなど)をうまく使ってイベント処理をしなければいけないんだけれども、任意のクライアントに対してどうやってこれを開放すべきなんだろうか。
考え中。
 
 
次のステップとしては
- uip_xxxのイベントを意識したコードを書く。(サーバー内クライアント)
- イベント処理の流れが完全に把握できたら任意のクライアントに開放する仕組みを考える
という感じで。
 

コメント

コメントはありません。 コメント/mones2/22.ネットワークサーバ/04.uIPのサーバーを作ろう簡単なWrite?

お名前:

MENU

now: 2

リンク


最新の20件
2017-09-29 2017-04-25 2017-01-10 2016-12-11 2016-12-09 2016-10-04 2016-08-14 2016-06-05 2016-05-29 2016-04-15 2015-12-28 2013-02-25 2013-02-21 2013-02-20 2013-02-12 2013-02-11 2013-02-10
最新の20件
2010-02-01 2010-01-31 2010-01-30 2010-01-29 2010-01-16

Counter: 2736, today: 1, yesterday: 0

添付ファイル: fileuip-0.9-server-winpcap-20060129.zip 435件 [詳細] fileuip-0.9-server-winpcap-20060128-2.zip 379件 [詳細] fileuip-0.9-server-winpcap-20060128.zip 405件 [詳細]

リロード   新規 編集 凍結 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS

Last-modified: 2008-03-28 (金) 15:48:01 (3681d);  Modified by mona
PukiWiki 1.4.6 Copyright © 2001-2005 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-ji
Powered by PHP 5.2.17
HTML convert time to 0.210 sec.