====== netRecv ====== ''u16 netRecv( u8 socket, u8 * buf, u16 len) '' |socket : 소켓번호 (0 부터 3 사이 값) | |buf :수신한 데이터를 저장할 곳의 포인터 | |len : 수신할 데이터의 바이트수 | ==== 설명 ==== 이더넷 데이터 수신 함수입니다. netStatus 함수로 읽어본 상태가 SOCK_ESTABLISHED 일 경우에만 사용할 수 있습니다. 수신할 데이터의 개수를 적어주어야 하므로, 본 함수를 사용하기 전에 수신버퍼에 데이터가 도착해 있는지를 살펴보아야 합니다. 이를 위한 netRxLen 함수가 준비되어 있습니다. 성공하면 수신한데이터의 개수를 반환하고, 실패하면 –1 (0xffff)을 반환합니다. ==== 사용예 ==== 다음은 TCP 루프백 테스트 프로그램입니다. 아래그림처럼 네트워크상에 TCP 에코처리를 해주는 별도의 디바이스가 있어야 테스트가 가능합니다. 이 프로그램은 에코디바이스로 TCP 데이터를 송신하고, 같은 데이터가 되돌아 오는지를 확인하여, LCD 상에 표시해주는 프로그램입니다. 에코디바이스의 IP 어드레스는 192.168.0.1 로 되어 있습니다. #include "moacon500.h" void cmain(void) { u8 i=0x35,j; u16 k,kk=0,length1; clcdPower(1); clcdI2cInit(0); u8 GatewayIP[]={192,168,0,1}; u8 SubnetMask[]={255,255,255,0}; u8 MacAdr[]={0,0,34,53,12,0}; u8 DeviceIp[]={192,168,0,12}; u8 destIP[]={192,168,0,2}; char data1[] = "Comfile"; char data2[20]; netBegin(GatewayIP, SubnetMask, MacAdr, DeviceIp); socketOpen(0,1000); connect(0,destIP,5000); while (1) { switch(netStatus(0)) { case SOCK_ESTABLISHED: netPrint(0,"Comfile%D%C",kk++,0); delay(20); length1 = netRxLen(0); clcdLocate(0,2); netRecv(0,data2,length1); data2[--length1]=0; clcdPrint(0,2,data2); clcdPrint(0,3,"Rx=%d",length1); delay(200); break; case SOCK_CLOSE_WAIT: disConnect(0); clcdPrint(0,0,"Socket disconnect"); delay(200); break; case SOCK_CLOSED: clcdPrint(0,0,"Socket Closed "); delay(200); if (connect(0,destIP,5000) != 0 ) { clcdPrint(0,0,"Socket open "); } break; } } } {{ :moacon:netrxlen:ethernetsample.png?nolink |}} [[moacon:index#-m-|라이브러리 목록으로 가기]]