This example demonstrates the basic concept of sending a large
amount of data using a UDP socket.
The example sends 64 Kbytes to the remote IP address
192.168.0.100, which is listening on port 1000.
The UDP socket will be allocated permanently and will not be
released when the data is sent.
The data is sent as a stream of bytes.
The UDP socket does not wait for acknowledge from the remote
peer to ascertain whether the data has been accepted. For this
reason, a very simple acknowledge protocol is added to the example.
The data will be sent in 512-byte blocks. Upon receiving the
packet, the remote peer will send back a simple UDP packet with an
acknowledgement. The acknowledgement is simply an index of the
received packet starting with 0.
The send_data() function sends UDP Data and waits for
acknowledge. Note that the UDP sockets do not support any
acknowledgment. The example provides its own acknowledgement.
void send_data (void) {
static const U8 rem_IP[4] = {192,168,0,100};
U8 *sendbuf;
if (wait_ack == __TRUE) {
return;
}
if (bindex < 128) {
sendbuf = udp_get_buf (512);
for (i = 0; i < 512; i += 2) {
sendbuf[i] = bcount >> 8;
sendbuf[i+1] = bcount & 0xFF;
}
udp_send (udp_soc, rem_IP, 1000, sendbuf, 512);
}
}
When the packet is sent, wait for the remote acknowledge
before proceeding with the next data packet. Use the callback
listener function to
wait for the remote acknowledge.
U16 udp_callback (U8 socket, U8 *remip, U16 port, U8 *buf, U16 len) {
/* This function is called when UDP data has been received. */
if ((len == 2) && (bindex == (buf[0]<<8 | buf[1]))) {
wait_ack == __FALSE;
}
return (0);
}
Note
The example assumes that the Network Interface Adapter is
selected, enabled, and properly configured in the Net_Config.c configuration
file.
If the system runs out of UDP sockets, the application hangs in
an endless loop in the system error function with the error
code ERR_UDP_ALLOC.
This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies.
ARM websites use two types of cookie: (1) those that enable the site to function and perform as required; and (2) analytical cookies which anonymously track visitors only while using the site. If you are not happy with this use of these cookies please review our Privacy Policy to learn how they can be disabled. By disabling cookies some features of the site will not work.