ESP32  1.0.4
WiFiUDP クラス

#include <WiFiUdp.h>

WiFiUDP の継承関係図
UDP Stream Print

公開メンバ関数

 WiFiUDP ()
 
 ~WiFiUDP ()
 
uint8_t begin (IPAddress a, uint16_t p)
 
uint8_t begin (uint16_t p)
 
uint8_t beginMulticast (IPAddress a, uint16_t p)
 
void stop ()
 
int beginMulticastPacket ()
 
int beginPacket ()
 
int beginPacket (IPAddress ip, uint16_t port)
 
int beginPacket (const char *host, uint16_t port)
 
int endPacket ()
 
size_t write (uint8_t)
 
size_t write (const uint8_t *buffer, size_t size)
 
int parsePacket ()
 
int available ()
 
int read ()
 
int read (unsigned char *buffer, size_t len)
 
int read (char *buffer, size_t len)
 
int peek ()
 
void flush ()
 
IPAddress remoteIP ()
 
uint16_t remotePort ()
 
- 基底クラス Stream に属する継承公開メンバ関数
 Stream ()
 
virtual ~Stream ()
 
void setTimeout (unsigned long timeout)
 
unsigned long getTimeout (void)
 
bool find (const char *target)
 
bool find (uint8_t *target)
 
bool find (const char *target, size_t length)
 
bool find (const uint8_t *target, size_t length)
 
bool find (char target)
 
bool findUntil (const char *target, const char *terminator)
 
bool findUntil (const uint8_t *target, const char *terminator)
 
bool findUntil (const char *target, size_t targetLen, const char *terminate, size_t termLen)
 
bool findUntil (const uint8_t *target, size_t targetLen, const char *terminate, size_t termLen)
 
long parseInt ()
 
float parseFloat ()
 
virtual size_t readBytes (char *buffer, size_t length)
 
virtual size_t readBytes (uint8_t *buffer, size_t length)
 
size_t readBytesUntil (char terminator, char *buffer, size_t length)
 
size_t readBytesUntil (char terminator, uint8_t *buffer, size_t length)
 
virtual String readString ()
 
String readStringUntil (char terminator)
 
- 基底クラス Print に属する継承公開メンバ関数
 Print ()
 
virtual ~Print ()
 
int getWriteError ()
 
void clearWriteError ()
 
size_t write (const char *str)
 
size_t write (const char *buffer, size_t size)
 
size_t printf (const char *format,...) __attribute__((format(printf
 
size_t size_t print (const __FlashStringHelper *)
 
size_t print (const String &)
 
size_t print (const char[])
 
size_t print (char)
 
size_t print (unsigned char, int=DEC)
 
size_t print (int, int=DEC)
 
size_t print (unsigned int, int=DEC)
 
size_t print (long, int=DEC)
 
size_t print (unsigned long, int=DEC)
 
size_t print (double, int=2)
 
size_t print (const Printable &)
 
size_t print (struct tm *timeinfo, const char *format=NULL)
 
size_t println (const __FlashStringHelper *)
 
size_t println (const String &s)
 
size_t println (const char[])
 
size_t println (char)
 
size_t println (unsigned char, int=DEC)
 
size_t println (int, int=DEC)
 
size_t println (unsigned int, int=DEC)
 
size_t println (long, int=DEC)
 
size_t println (unsigned long, int=DEC)
 
size_t println (double, int=2)
 
size_t println (const Printable &)
 
size_t println (struct tm *timeinfo, const char *format=NULL)
 
size_t println (void)
 

その他の継承メンバ

- 基底クラス UDP に属する継承限定公開メンバ関数
uint8_trawIPAddress (IPAddress &addr)
 
- 基底クラス Stream に属する継承限定公開メンバ関数
int timedRead ()
 
int timedPeek ()
 
int peekNextDigit ()
 
long parseInt (char skipChar)
 
float parseFloat (char skipChar)
 
- 基底クラス Print に属する継承限定公開メンバ関数
void setWriteError (int err=1)
 
- 基底クラス Stream に属する継承限定公開変数類
unsigned long _timeout
 
unsigned long _startMillis
 

詳解

WiFiUdp.h42 行目に定義があります。

構築子と解体子

◆ WiFiUDP()

WiFiUDP::WiFiUDP ( )

WiFiUdp.cpp27 行目に定義があります。

28 : udp_server(-1)
29 , server_port(0)
30 , remote_port(0)
31 , tx_buffer(0)
32 , tx_buffer_len(0)
33 , rx_buffer(0)
34 {}

◆ ~WiFiUDP()

WiFiUDP::~WiFiUDP ( )

WiFiUdp.cpp36 行目に定義があります。

36  {
37  stop();
38 }
void stop()
Definition: WiFiUdp.cpp:99

関数詳解

◆ available()

int WiFiUDP::available ( void  )
virtual

UDPを実装しています。

WiFiUdp.cpp232 行目に定義があります。

232  {
233  if(!rx_buffer) return 0;
234  return rx_buffer->available();
235 }
size_t available() const
Definition: cbuf.cpp:72

◆ begin() [1/2]

uint8_t WiFiUDP::begin ( IPAddress  a,
uint16_t  p 
)

WiFiUdp.cpp40 行目に定義があります。

40  {
41  stop();
42 
43  server_port = port;
44 
45  tx_buffer = new char[1460];
46  if(!tx_buffer){
47  log_e("could not create tx buffer: %d", errno);
48  return 0;
49  }
50 
51  if ((udp_server=socket(AF_INET, SOCK_DGRAM, 0)) == -1){
52  log_e("could not create socket: %d", errno);
53  return 0;
54  }
55 
56  int yes = 1;
57  if (setsockopt(udp_server,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(yes)) < 0) {
58  log_e("could not set socket option: %d", errno);
59  stop();
60  return 0;
61  }
62 
63  struct sockaddr_in addr;
64  memset((char *) &addr, 0, sizeof(addr));
65  addr.sin_family = AF_INET;
66  addr.sin_port = htons(server_port);
67  addr.sin_addr.s_addr = (in_addr_t)address;
68  if(bind(udp_server , (struct sockaddr*)&addr, sizeof(addr)) == -1){
69  log_e("could not bind socket: %d", errno);
70  stop();
71  return 0;
72  }
74  return 1;
75 }
u32_t in_addr_t
Definition: inet.h:55
ASIO_DECL socket_type socket(int af, int type, int protocol, asio::error_code &ec)
#define O_NONBLOCK
#define htons(x)
Definition: def.h:108
#define errno
Definition: errno.h:14
void stop()
Definition: WiFiUdp.cpp:99
ASIO_DECL int setsockopt(socket_type s, state_type &state, int level, int optname, const void *optval, std::size_t optlen, asio::error_code &ec)
#define log_e(format,...)
ASIO_DECL int bind(socket_type s, const socket_addr_type *addr, std::size_t addrlen, asio::error_code &ec)
ASIO_DECL int fcntl(int d, int cmd, asio::error_code &ec)
endr Lperloop blti Lstart_memw memw movi Lperloop *linesize bltu Lstart_cachex endif endm macro cache_hit_region addr
Definition: cacheasm.h:208
#define F_SETFL

◆ begin() [2/2]

uint8_t WiFiUDP::begin ( uint16_t  p)
virtual

UDPを実装しています。

WiFiUdp.cpp77 行目に定義があります。

77  {
78  return begin(IPAddress(INADDR_ANY), p);
79 }
#define INADDR_ANY
Definition: inet.h:75
uint8_t begin(IPAddress a, uint16_t p)
Definition: WiFiUdp.cpp:40

◆ beginMulticast()

uint8_t WiFiUDP::beginMulticast ( IPAddress  a,
uint16_t  p 
)

WiFiUdp.cpp81 行目に定義があります。

81  {
82  if(begin(IPAddress(INADDR_ANY), p)){
83  if(a != 0){
84  struct ip_mreq mreq;
85  mreq.imr_multiaddr.s_addr = (in_addr_t)a;
86  mreq.imr_interface.s_addr = INADDR_ANY;
87  if (setsockopt(udp_server, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)) < 0) {
88  log_e("could not join igmp: %d", errno);
89  stop();
90  return 0;
91  }
92  multicast_ip = a;
93  }
94  return 1;
95  }
96  return 0;
97 }
#define INADDR_ANY
Definition: inet.h:75
u32_t in_addr_t
Definition: inet.h:55
#define errno
Definition: errno.h:14
void stop()
Definition: WiFiUdp.cpp:99
ASIO_DECL int setsockopt(socket_type s, state_type &state, int level, int optname, const void *optval, std::size_t optlen, asio::error_code &ec)
#define log_e(format,...)
uint8_t begin(IPAddress a, uint16_t p)
Definition: WiFiUdp.cpp:40

◆ beginMulticastPacket()

int WiFiUDP::beginMulticastPacket ( )

WiFiUdp.cpp123 行目に定義があります。

123  {
124  if(!server_port || multicast_ip == IPAddress(INADDR_ANY))
125  return 0;
126  remote_ip = multicast_ip;
127  remote_port = server_port;
128  return beginPacket();
129 }
#define INADDR_ANY
Definition: inet.h:75
int beginPacket()
Definition: WiFiUdp.cpp:131

◆ beginPacket() [1/3]

int WiFiUDP::beginPacket ( )

WiFiUdp.cpp131 行目に定義があります。

131  {
132  if(!remote_port)
133  return 0;
134 
135  // allocate tx_buffer if is necessary
136  if(!tx_buffer){
137  tx_buffer = new char[1460];
138  if(!tx_buffer){
139  log_e("could not create tx buffer: %d", errno);
140  return 0;
141  }
142  }
143 
144  tx_buffer_len = 0;
145 
146  // check whereas socket is already open
147  if (udp_server != -1)
148  return 1;
149 
150  if ((udp_server=socket(AF_INET, SOCK_DGRAM, 0)) == -1){
151  log_e("could not create socket: %d", errno);
152  return 0;
153  }
154 
156 
157  return 1;
158 }
ASIO_DECL socket_type socket(int af, int type, int protocol, asio::error_code &ec)
#define O_NONBLOCK
#define errno
Definition: errno.h:14
#define log_e(format,...)
ASIO_DECL int fcntl(int d, int cmd, asio::error_code &ec)
#define F_SETFL

◆ beginPacket() [2/3]

int WiFiUDP::beginPacket ( IPAddress  ip,
uint16_t  port 
)
virtual

UDPを実装しています。

WiFiUdp.cpp160 行目に定義があります。

160  {
161  remote_ip = ip;
162  remote_port = port;
163  return beginPacket();
164 }
int beginPacket()
Definition: WiFiUdp.cpp:131

◆ beginPacket() [3/3]

int WiFiUDP::beginPacket ( const char *  host,
uint16_t  port 
)
virtual

UDPを実装しています。

WiFiUdp.cpp166 行目に定義があります。

166  {
167  struct hostent *server;
168  server = gethostbyname(host);
169  if (server == NULL){
170  log_e("could not get host from dns: %d", errno);
171  return 0;
172  }
173  return beginPacket(IPAddress((const uint8_t *)(server->h_addr_list[0])), port);
174 }
#define NULL
Definition: def.h:70
#define errno
Definition: errno.h:14
#define log_e(format,...)
int beginPacket()
Definition: WiFiUdp.cpp:131
__uint8_t uint8_t
Definition: stdint.h:21

◆ endPacket()

int WiFiUDP::endPacket ( )
virtual

UDPを実装しています。

WiFiUdp.cpp176 行目に定義があります。

176  {
177  struct sockaddr_in recipient;
178  recipient.sin_addr.s_addr = (uint32_t)remote_ip;
179  recipient.sin_family = AF_INET;
180  recipient.sin_port = htons(remote_port);
181  int sent = sendto(udp_server, tx_buffer, tx_buffer_len, 0, (struct sockaddr*) &recipient, sizeof(recipient));
182  if(sent < 0){
183  log_e("could not send data: %d", errno);
184  return 0;
185  }
186  return 1;
187 }
#define htons(x)
Definition: def.h:108
#define errno
Definition: errno.h:14
__uint32_t uint32_t
Definition: stdint.h:45
#define log_e(format,...)
ASIO_DECL signed_size_type sendto(socket_type s, const buf *bufs, size_t count, int flags, const socket_addr_type *addr, std::size_t addrlen, asio::error_code &ec)

◆ flush()

void WiFiUDP::flush ( void  )
virtual

UDPを実装しています。

WiFiUdp.cpp268 行目に定義があります。

268  {
269  if(!rx_buffer) return;
270  cbuf *b = rx_buffer;
271  rx_buffer = 0;
272  delete b;
273 }
const cJSON *const b
Definition: cJSON.h:251
Definition: cbuf.h:28

◆ parsePacket()

int WiFiUDP::parsePacket ( )
virtual

UDPを実装しています。

WiFiUdp.cpp205 行目に定義があります。

205  {
206  if(rx_buffer)
207  return 0;
208  struct sockaddr_in si_other;
209  int slen = sizeof(si_other) , len;
210  char * buf = new char[1460];
211  if(!buf){
212  return 0;
213  }
214  if ((len = recvfrom(udp_server, buf, 1460, MSG_DONTWAIT, (struct sockaddr *) &si_other, (socklen_t *)&slen)) == -1){
215  delete[] buf;
216  if(errno == EWOULDBLOCK){
217  return 0;
218  }
219  log_e("could not receive data: %d", errno);
220  return 0;
221  }
222  remote_ip = IPAddress(si_other.sin_addr.s_addr);
223  remote_port = ntohs(si_other.sin_port);
224  if (len > 0) {
225  rx_buffer = new cbuf(len);
226  rx_buffer->write(buf, len);
227  }
228  delete[] buf;
229  return len;
230 }
size_t write(char c)
Definition: cbuf.cpp:147
ASIO_DECL signed_size_type recvfrom(socket_type s, buf *bufs, size_t count, int flags, socket_addr_type *addr, std::size_t *addrlen, asio::error_code &ec)
#define errno
Definition: errno.h:14
#define EWOULDBLOCK
Definition: errno.h:185
u32_t socklen_t
Definition: if.h:38
#define log_e(format,...)
Definition: cbuf.h:28
#define ntohs(x)
Definition: def.h:109

◆ peek()

int WiFiUDP::peek ( void  )
virtual

UDPを実装しています。

WiFiUdp.cpp263 行目に定義があります。

263  {
264  if(!rx_buffer) return -1;
265  return rx_buffer->peek();
266 }
int peek()
Definition: cbuf.cpp:93

◆ read() [1/3]

int WiFiUDP::read ( void  )
virtual

UDPを実装しています。

WiFiUdp.cpp237 行目に定義があります。

237  {
238  if(!rx_buffer) return -1;
239  int out = rx_buffer->read();
240  if(!rx_buffer->available()){
241  cbuf *b = rx_buffer;
242  rx_buffer = 0;
243  delete b;
244  }
245  return out;
246 }
size_t available() const
Definition: cbuf.cpp:72
const cJSON *const b
Definition: cJSON.h:251
int read()
Definition: cbuf.cpp:119
Definition: cbuf.h:28

◆ read() [2/3]

int WiFiUDP::read ( unsigned char *  buffer,
size_t  len 
)
virtual

UDPを実装しています。

WiFiUdp.cpp248 行目に定義があります。

248  {
249  return read((char *)buffer, len);
250 }
int read()
Definition: WiFiUdp.cpp:237
char * buffer
Definition: cJSON.h:161

◆ read() [3/3]

int WiFiUDP::read ( char *  buffer,
size_t  len 
)
virtual

UDPを実装しています。

WiFiUdp.cpp252 行目に定義があります。

252  {
253  if(!rx_buffer) return 0;
254  int out = rx_buffer->read(buffer, len);
255  if(!rx_buffer->available()){
256  cbuf *b = rx_buffer;
257  rx_buffer = 0;
258  delete b;
259  }
260  return out;
261 }
size_t available() const
Definition: cbuf.cpp:72
const cJSON *const b
Definition: cJSON.h:251
char * buffer
Definition: cJSON.h:161
int read()
Definition: cbuf.cpp:119
Definition: cbuf.h:28

◆ remoteIP()

IPAddress WiFiUDP::remoteIP ( )
virtual

UDPを実装しています。

WiFiUdp.cpp275 行目に定義があります。

275  {
276  return remote_ip;
277 }

◆ remotePort()

uint16_t WiFiUDP::remotePort ( )
virtual

UDPを実装しています。

WiFiUdp.cpp279 行目に定義があります。

279  {
280  return remote_port;
281 }

◆ stop()

void WiFiUDP::stop ( )
virtual

UDPを実装しています。

WiFiUdp.cpp99 行目に定義があります。

99  {
100  if(tx_buffer){
101  delete[] tx_buffer;
102  tx_buffer = NULL;
103  }
104  tx_buffer_len = 0;
105  if(rx_buffer){
106  cbuf *b = rx_buffer;
107  rx_buffer = NULL;
108  delete b;
109  }
110  if(udp_server == -1)
111  return;
112  if(multicast_ip != 0){
113  struct ip_mreq mreq;
114  mreq.imr_multiaddr.s_addr = (in_addr_t)multicast_ip;
115  mreq.imr_interface.s_addr = (in_addr_t)0;
116  setsockopt(udp_server, IPPROTO_IP, IP_DROP_MEMBERSHIP, &mreq, sizeof(mreq));
117  multicast_ip = IPAddress(INADDR_ANY);
118  }
119  close(udp_server);
120  udp_server = -1;
121 }
#define INADDR_ANY
Definition: inet.h:75
u32_t in_addr_t
Definition: inet.h:55
#define NULL
Definition: def.h:70
ASIO_DECL int close(int d, state_type &state, asio::error_code &ec)
const cJSON *const b
Definition: cJSON.h:251
ASIO_DECL int setsockopt(socket_type s, state_type &state, int level, int optname, const void *optval, std::size_t optlen, asio::error_code &ec)
Definition: cbuf.h:28

◆ write() [1/2]

size_t WiFiUDP::write ( uint8_t  data)
virtual

UDPを実装しています。

WiFiUdp.cpp189 行目に定義があります。

189  {
190  if(tx_buffer_len == 1460){
191  endPacket();
192  tx_buffer_len = 0;
193  }
194  tx_buffer[tx_buffer_len++] = data;
195  return 1;
196 }
int endPacket()
Definition: WiFiUdp.cpp:176

◆ write() [2/2]

size_t WiFiUDP::write ( const uint8_t buffer,
size_t  size 
)
virtual

UDPを実装しています。

WiFiUdp.cpp198 行目に定義があります。

198  {
199  size_t i;
200  for(i=0;i<size;i++)
201  write(buffer[i]);
202  return i;
203 }
size_t write(uint8_t)
Definition: WiFiUdp.cpp:189
macro cache_index_all size
Definition: cacheasm.h:158
char * buffer
Definition: cJSON.h:161

このクラス詳解は次のファイルから抽出されました: