TcpClientサンプルプログラムC言語
TCPクライアントサンプルプログラム
キーワード:
ネットワーク関連のコードをデバッグするたびに、最も簡単なTCPテストプログラムが必要になります.その後、このプログラムをコードクリップに記録しました.今日は自分のブログに再記録して、もっと検索しやすいことを望んでいます.
簡単なTCPクライアントプログラムソース
このコードは、RT-Tered OSでテストして使用し、検証に合格しました. RT_が定義されている場合USING_SALマクロでは、RT-Thread SALコンポーネントが提供するsocketパッケージを使用して、SAL関連ヘッダファイル を参照する必要があります. RT_が定義されていない場合USING_SALマクロは、lwip socketを直接使用し、lwip関連ヘッダファイル を含む.
ソースコードは次のとおりです.
RT-Thread MSHでは、Finshコマンドを直接使用して実行できます.
キーワード:
TCP
TCP client
LWIP TCP
LWIP TCP client
ネットワーク関連のコードをデバッグするたびに、最も簡単なTCPテストプログラムが必要になります.その後、このプログラムをコードクリップに記録しました.今日は自分のブログに再記録して、もっと検索しやすいことを望んでいます.
簡単なTCPクライアントプログラムソース
このコードは、RT-Tered OSでテストして使用し、検証に合格しました.
#include
#include
#include "lwip/sockets.h"
#include "lwip/netdb.h"
#include "lwip/sys.h"
ソースコードは次のとおりです.
#include
#include
#include
#ifdef RT_USING_SAL
#include
#include
#else
#include "lwip/sockets.h"
#include "lwip/netdb.h"
#include "lwip/sys.h"
#endif
#define SAL_TCP_TEST_HOST "your host or ip addr" /* TCP server ip */
#define SAL_TCP_TEST_PORT (80u) /* TCP Server */
#define SAL_TEST_BUFSZ (1024u)
static const char *send_tcp_req_data = "Hi, I am from tcp client.";
static void _sal_tcp_test(void)
{
int ret, i;
char *recv_data;
struct hostent *host;
int sock = -1, bytes_received;
struct sockaddr_in server_addr;
/* url host ( , ) */
host = gethostbyname(SAL_TCP_TEST_HOST);
if (!host)
{
rt_kprintf("gethostbyname failed!\r
");
return;
}
else
{
rt_kprintf("gethostbyname success!\r
");
}
recv_data = rt_calloc(1, SAL_TEST_BUFSZ);
if (recv_data == RT_NULL)
{
rt_kprintf("No memory
");
return;
}
/* socket, SOCKET_STREAM,TCP , TLS */
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
rt_kprintf("Socket error
");
goto __exit;
}
else
{
rt_kprintf("Socket pass
");
}
/* */
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(SAL_TCP_TEST_PORT);
server_addr.sin_addr = *((struct in_addr *)host->h_addr);
rt_memset(&(server_addr.sin_zero), 0, sizeof(server_addr.sin_zero));
rt_kprintf("will connect...
");
if (connect(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) < 0)
{
rt_kprintf("Connect fail!
");
goto __exit;
}
else
{
rt_kprintf("Connect pass!
");
}
/* socket */
ret = send(sock, send_tcp_req_data, strlen(send_tcp_req_data), 0);
if (ret <= 0)
{
rt_kprintf("send error,close the socket.
");
goto __exit;
}
else
{
rt_kprintf("send pass!
");
}
/* , */
bytes_received = recv(sock, recv_data, SAL_TEST_BUFSZ - 1, 0);
if (bytes_received <= 0)
{
rt_kprintf("received error,close the socket.
");
goto __exit;
}
rt_kprintf("recv data:
");
for (i = 0; i < bytes_received; i++)
{
rt_kprintf("%c", recv_data[i]);
}
__exit:
if (recv_data)
rt_free(recv_data);
if (sock >= 0)
closesocket(sock);
}
static void sal_tcp_test(void)
{
rt_thread_t tid;
tid = rt_thread_create("sal_tcp", _sal_tcp_test, RT_NULL, 4096, 23, 5);
if (tid)
rt_thread_startup(tid);
else
{
rt_kprintf("sal_tcp thread create failed!\r
");
}
}
#ifdef FINSH_USING_MSH
#include
MSH_CMD_EXPORT(sal_tcp_test, SAL TCP function test);
#endif /* FINSH_USING_MSH */
RT-Thread MSHでは、Finshコマンドを直接使用して実行できます.
msh /> sal_tcp_test