simplesocketを用いたTCP/IP通信がうまくいかない

mbed についてのご質問はこちら。情報交換などにもご利用ください。

simplesocketを用いたTCP/IP通信がうまくいかない

投稿記事by ookenn07 » 2013年3月16日(土) 11:28

はじめまして、大崎といいます。
さっそく本題なのですが、PCとmbedをネットワークを介して通信させたいと思い
simplesocketを用いたプログラムを組みました。
今回は、PCに自作サーバープログラムを設置し、mbedがクライアントとなって接続する方法です。
流れとしては
mbedがPCに接続要求し接続が確立 → クライアントから文字列送信 → 通信切断
一通りプログラムは動くのですが、mbedからの文字列の送信がうまくいってないようで
サーバーにいつまでたっても文字列が来ません。

ここで、サーバーのプログラムがそもそも間違っていると考えたのですが
Tera Teamというソフトを用いて別のPCからTCP/IP接続を試み文字列の送信を行ったところ、サーバープログラム上で文字列が表示されることを確認しました。

ここには載せてないのですが、接続確立後サーバーから文字を送信 → mbedで受信 → 表示 というプログラムを組んでみたのですが。
どうも受信のほうもうまくいってないようで、どれだけ待ってもサーバーからの文字列が届きません。
ネットワークに問題があるんでしょうか?

コード: 全て選択
#include "mbed.h"
#include "EthernetNetIf.h"
#include "SimpleSocket.h"

DigitalOut led_1(LED1);
DigitalOut led_2(LED2);

int main()
{
    EthernetNetIf eth(
    IpAddr(IPアドレス),
    IpAddr(サブネットマスク),
    IpAddr(ゲートウェイ),
    IpAddr(DNS)   
    );
   
    eth.setup();
   

    ClientSocket socket(接続先IP,ポート);
    if(socket.connected()) {
        wait(1.0);
        socket.printf("Hello");
        socket.close();
        while(true) {
            led_1 = 1;
            wait(0.2);
            led_1 = 0;
            wait(0.2);
        }
    }

    while(true) {
        led_2 = 1;
        wait(0.2);
        led_2 = 0;
        wait(0.2);
    }
}
ookenn07
 
記事: 4
登録日時: 2013年3月15日(金) 22:52

Re: simplesocketを用いたTCP/IP通信がうまくいかない

投稿記事by yamaguch » 2013年3月18日(月) 16:37

大崎さん、はじめまして、

Tera Teamというソフトを用いて別のPCからTCP/IP接続を試み文字列の送信を行ったところ、サーバープログラム上で文字列が表示されることを確認しました。

Windows 環境で Tera Term で確認されたということでしょうか。

SimpleSocket のライブラリはどこから持ってこられたのでしょう?
それから EthernetNetIf が使われているということは、古いライブラリだと思うのですが、mbed のライブラリの Revision はいくつでしょうか。
Rivision はコンパイラのウィンドウでプログラムのフォルダ内の mbed ライブラリのアイコンを選択すると、ウィンドウの右側に表示されます。

よろしければ自己紹介をお願いします ;)
http://www.senionetworks.jp/bbs/viewforum.php?f=16

山口
yamaguch
 
記事: 482
登録日時: 2010年7月06日(火) 17:37

Re: simplesocketを用いたTCP/IP通信がうまくいかない

投稿記事by ookenn07 » 2013年3月20日(水) 11:22

返事が遅くなり申し訳ありません。
返信ありがとうございます。
Windows 環境で Tera Term で確認されたということでしょうか。

はい、そういうことです。
二台のPC(os : windows)を用意し、片方にサーバープログラム、片方にteratermを入れて
サーバープログラムはきちんと動いているか確認したということです。

バージョンが古いとのことですが、入っていたのをそのまま使っていたので
確かに古いものを使っていたようです。
最新のSimpleSocketのライブラリと、それに伴いEthernetInterfaceのライブラリも入れました。
http://mbed.org/users/yamaguch/code/SimpleSocket/
http://mbed.org/users/mbed_official/cod ... Interface/

Ethernetのプログラムを以下に書き換えたのですが、これであってるでしょうか?(それ以外は変更してません)
(IPアドレスと、ゲートウェイは伏せてあります)
コード: 全て選択
EthernetInterface eth;
eth.init("0.0.0.0","255.255.255.0","0.0.0.0");
eth.connect(4000);


この状態で、1度コンパイルしてみたのですが
rtos.hがないというエラーが出たので、mbed-rtosというライブラリも入れました。
http://mbed.org/users/mbed_official/code/mbed-rtos/

この状態で、コンパイルしたところたくさんのエラーが出ました
どうも、EthernetINterfaceのライブラリの中のファイルのエラーばかりなんですが...

えっと、まず入れているライブラリはあっていますか?
どこかで、間違っているところがあるでしょうか?
ookenn07
 
記事: 4
登録日時: 2013年3月15日(金) 22:52

Re: simplesocketを用いたTCP/IP通信がうまくいかない

投稿記事by yamaguch » 2013年3月21日(木) 10:09

この状態で、コンパイルしたところたくさんのエラーが出ました
どうも、EthernetINterfaceのライブラリの中のファイルのエラーばかりなんですが...

エラーをひとつずつ潰して行けば、きっと解決すると思います。
頑張ってください。

山口
yamaguch
 
記事: 482
登録日時: 2010年7月06日(火) 17:37

Re: simplesocketを用いたTCP/IP通信がうまくいかない

投稿記事by ookenn07 » 2013年3月22日(金) 16:27

返信ありがとうございます。
まだ解決に至っていませんが、がんばってみます。
ありがとうございました。
ookenn07
 
記事: 4
登録日時: 2013年3月15日(金) 22:52


Return to mbed 質問箱

cron