######前提
*初めてこのようなプログラムを作るので、的外れなことを言っているかもしれません。
そのため、些細なことでもすべて指摘していただけると非常に助かります。
今回と直接的な関係はないですが、前回質問したときと同様のプログラムを使用しています。
【実現したいこと】
♦目的
UDP通信を実現したい
♦サンプルプログラムをもとに作成したプログラムプログラムのZIPファイルへのリンク
main.c(下に記載)
loopback.c(一部を下に記載)
loopback.h
socket.c
socket.h
w5200.c
w5200.h
wizchip_conf.c
wizchip_conf.h
*他の部分はコードが長く、記載できないため、以下のZIPファイルにまとめました。
プログラムのZIPファイルへのリンク
♦詳細
①Server側
サンプルプログラム内のloopback_udpを使って通信したい
・使用機器
EthernetIF:WIZnet W5200 for QuickStart (#40002)リンク
プロセッサ側:Propeller QuickStart (#40000)リンク
これをPCとつないでSimpleIDEという統合開発環境を使用している。
②Client側*まだ未完
Serverからデータを1~10Mbyte分受信し、ファイルに保存する。
*正直まだどのようにすればよいかわからない。
#質問内容
まず、Server側のプログラムを完成させたいと考えてます。
そこで、メイン関数を作成したいのですが、
・loopback_udp()の使い方
・IPアドレスの設定方法
・受信の仕方
という部分が分からない状態です。。。
###Build時に出てくるメッセージ
以下のようにエラーは発生していないのですが、SimpleIDEのターミナルには、main関数で自分が書いた”Server program start!!!”
しか表示されていない状態です。
SimpleIDE Version 1.1.2 propeller-elf-gcc.exe -v GCC 4.6.1 (propellergcc_v1_0_0_2408) propeller-elf-gcc.exe -I . -L . -Os -mcmm -m32bit-doubles -fno-exceptions -std=c99 -c loopback.c -o cmm/loopback.o propeller-elf-gcc.exe -I . -L . -Os -mcmm -m32bit-doubles -fno-exceptions -std=c99 -c socket.c -o cmm/socket.o propeller-elf-gcc.exe -I . -L . -Os -mcmm -m32bit-doubles -fno-exceptions -std=c99 -c w5200.c -o cmm/w5200.o propeller-elf-gcc.exe -I . -L . -Os -mcmm -m32bit-doubles -fno-exceptions -std=c99 -c wizchip_conf.c -o cmm/wizchip_conf.o propeller-elf-gcc.exe -I . -L . -o cmm/main.elf -Os -mcmm -m32bit-doubles -fno-exceptions -std=c99 cmm/loopback.o cmm/socket.o cmm/w5200.o cmm/wizchip_conf.o main.c -lm main.c: In function 'main': main.c:12:3: warning: implicit declaration of function 'printf' [-Wimplicit-function-declaration] main.c:12:3: warning: incompatible implicit declaration of built-in function 'printf' [enabled by default] main.c:18:16: warning: initialization makes pointer from integer without a cast [enabled by default] main.c:21:3: warning: passing argument 1 of 'loopback_udps' makes integer from pointer without a cast [enabled by default] loopback.h:32:9: note: expected 'uint8_t' but argument is of type 'uint8_t *' main.c:21:3: warning: passing argument 2 of 'loopback_udps' makes pointer from integer without a cast [enabled by default] loopback.h:32:9: note: expected 'uint8_t *' but argument is of type 'uint8_t' propeller-load -s cmm/main.elf propeller-elf-objdump -h cmm/main.elf Done. Build Succeeded!
該当のソースコード
main.c
#include "loopback.h" #include "w5200.h" #include "socket.h" #include "wizchip_conf.h" int main() { printf("Server program start!!!\n"); uint8_t sn[4]={0,0,0,0}; uint8_t* buf=1024; uint16_t port=3000; loopback_udps(sn, *buf, port); return 0; }
loopback.cのファイルの中のloopback_udps()
int32_t loopback_udps(uint8_t sn, uint8_t* buf, uint16_t port) { int32_t ret; uint16_t size, sentsize; uint8_t destip[4]; uint16_t destport; switch(getSn_SR(sn)) { case SOCK_UDP : if((size = getSn_RX_RSR(sn)) > 0) { if(size > DATA_BUF_SIZE) size = DATA_BUF_SIZE; ret = recvfrom(sn, buf, size, destip, (uint16_t*)&destport); if(ret <= 0) { #ifdef _LOOPBACK_DEBUG_ printf("%d: recvfrom error. %ld\r\n",sn,ret); #endif return ret; } size = (uint16_t) ret; sentsize = 0; while(sentsize != size) { ret = sendto(sn, buf+sentsize, size-sentsize, destip, destport); if(ret < 0) { #ifdef _LOOPBACK_DEBUG_ printf("%d: sendto error. %ld\r\n",sn,ret); #endif return ret; } sentsize += ret; // Don't care SOCKERR_BUSY, because it is zero. } } break; case SOCK_CLOSED: #ifdef _LOOPBACK_DEBUG_ //printf("%d:UDP loopback start\r\n",sn); #endif if((ret = socket(sn, Sn_MR_UDP, port, 0x00)) != sn) return ret; #ifdef _LOOPBACK_DEBUG_ printf("%d:Opened, UDP loopback, port [%d]\r\n", sn, port); #endif break; default : break; } return 1; }
試したこと
ネットワークウォッチャーを用いて、Server側のIPアドレスを見ると、192.168.1.104であった。
そのため、terminalを用いて、
IP:192.168.1.104
PORT:3000
にアクセスしてみたが、何も表示されなかった。
ちなみに、IPアドレスが、なぜこのようになっているのかわからない。
補足情報(使用機器、参考URL)
♦使用機器
WIZnet W5200 for QuickStart (#40002)
Propeller QuickStart (#40000)
♦IDE
simpleIDE
また、以下に参考にしたサイトを挙げておきます。
♦プログラムを作成するうえで参考にしたサイト*今回使用しているのはW5200
W5500 UDP機能
WIZnet ioLibrary
W5500 UDPサーバーへのデータ送信
回答2件
あなたの回答
tips
プレビュー