Here is a simple TCP client that can be used with the TCP server shown in the chapter 19.1.13. As example, assume to have two modules, one in server mode, the second one in client mode.
Client side:
set the PORT
set the IP address of the server, it is already running and waiting a message from client.
start the PDP context
start the tcp_client(): the message "Hello from AppZone!" is sent to the server
void tcp_client()
{
struct M2M_SOCKET_BSD_SOCKADDR_IN stSockAddr;
M2M_SOCKET_BSD_SOCKET SocketFD ;
M2M_SOCKET_BSD_FD_SET set;
CHAR buf_send[] = "Hello from AppZone!";
CHAR buf_recv[100];
INT32 Res;
UINT32 addr = 0;
UINT16 PORT = YYYY; /* ß SET PORT */
CHAR IP_SERVER[] = "XXX.XXX.XXX.XXX"; /* ß SET THE IP OF THE SERVER */
INT32 namelen = 0;
SocketFD = m2m_socket_bsd_socket(M2M_SOCKET_BSD_PF_INET, M2M_SOCKET_BSD_SOCK_STREAM,
M2M_SOCKET_BSD_IPPROTO_TCP);
if (M2M_SOCKET_BSD_INVALID_SOCKET == SocketFD)
{
PrintToUart("Socket handle FAILURE"); /* See chapter 19.1.8 PrintToUart */
return;
}
PrintToUart("Socket handle: SUCCESS");
memset(&stSockAddr, 0, sizeof(struct M2M_SOCKET_BSD_SOCKADDR_IN));
stSockAddr.sin_family = M2M_SOCKET_BSD_PF_INET;
stSockAddr.sin_port = m2m_socket_bsd_htons(PORT);
stSockAddr.sin_addr.s_addr = m2m_socket_bsd_inet_addr(IP_SERVER);
if (M2M_SOCKET_BSD_INVALID_SOCKET ==
m2m_socket_bsd_connect(SocketFD, (M2M_SOCKET_BSD_SOCKADDR *)&stSockAddr, sizeof(struct
M2M_SOCKET_BSD_SOCKADDR_IN)))
{
PrintToUart("Socket connects: FAILURE");
m2m_socket_bsd_close(SocketFD);
return;
}
PrintToUart("Socket connects: SUCCESS");
Res = m2m_socket_bsd_get_sock_name(SocketFD, ( M2M_SOCKET_BSD_SOCKADDR *)&stSockAddr, &namelen );
if (Res == 0)
{
/* IP address and Port */
PrintToUart ("IP: %s",m2m_socket_bsd_addr_str(stSockAddr.sin_addr.s_addr));
PrintToUart ("PORT: %u", m2m_socket_bsd_ntohs(stSockAddr.sin_port));
}
else
{
PrintToUart ("get_socket_name: FAILURE");
return;
}
/* send message to server */
Res = m2m_socket_bsd_send_buf_size(SocketFD);
if (Res > sizeof(buf_send))
{
PrintToUart ("Available buffer space = %d",Res);
Res = m2m_socket_bsd_send(SocketFD, buf_send, sizeof(buf_send), 0);
}
if(Res < 0)
{
PrintToUart ("Sending: FAILURE");
}
else
{
PrintToUart ("Sending: SUCCESS, character sent = %d", Res);
}
/* receive message from server */
Res = m2m_socket_bsd_recv(SocketFD, buf_recv, sizeof(buf_recv), 0);
if(Res < 0)
{
PrintToUart ("Receiving: FAILURE");
}
else
{
PrintToUart ("Receiving: SUCCESS, characters received = %d", Res);
PrintToUart("%s", buf_recv);
}
if(m2m_socket_bsd_close(SocketFD) == 0)
{
PrintToUart ("Close SUCCESS");
}
else
{
PrintToUart ("Close FAILURE");
}
return;
}