TCP 및 UDP 소켓 자습서
제품정보
이 튜토리얼은 TCP 및 UDP의 TAL 네트워크 소켓을 사용하는 방법을 설명합니다. TCP 클라이언트 walkthrough 경기examples/protocols/tcp_client (PROTOCOL_TCP, tal_net_connect, tal_net_send). UDP는 다음과 같이 설명됩니다.PROTOCOL_UDP, tal_net_bind, tal_net_send_to·tal_net_recvfrom; 콘크리트 UDP 방송 샘플 생활examples/wifi/ap.
자주 묻는 질문
제품 정보
- 건설 대상
examples/protocols/tcp_client이름 *tal_network(일반적으로) Wi-Fi. - 도달 가능한 TCP 서버. 기본 샘플 사용
127.0.0.1그리고 항구7; 기계설비 세트에TCP_SERVER_IPPC 또는 서버 LAN 주소로 포트를 엽니다. - UDP 실험, 피어 IP/포트 또는 방송 가능한 LAN (Wi-Fi AP 예제 참조).
단계 (TCP 클라이언트)
-
설치하기
TCP_SERVER_IP이름 *TCP_SERVER_PORT내 계정src/example_tcp_client.c. -
같은 파일에서 Wi-Fi 자격 구성
ENABLE_WIFI정의된다. -
빌드 및 실행 :
cd examples/protocols/tcp_clienttos.py config choicetos.py build -
네트워크가 끝나면 작업이 생성됩니다.
PROTOCOL_TCP소켓, 주소가 해결tal_net_str2addr, 통화tal_net_connect, 작은 완충기를 가진 몇몇 시간을 보냅니다tal_net_send, 다음tal_net_close.
확장된 결과: 서버는 반복된 페이로드를받습니다; 장치 로그는 연결하고 성공을 보냅니다.
TCP 클라이언트 코드 패턴
#include "tal_network.h"
int sock_fd = tal_net_socket_create(PROTOCOL_TCP);
TUYA_IP_ADDR_T server_ip = tal_net_str2addr(TCP_SERVER_IP);
if (tal_net_connect(sock_fd, server_ip, TCP_SERVER_PORT) < 0) {
PR_ERR("connect failed");
tal_net_close(sock_fd);
return;
}
const char msg[] = "Hello Tuya\n";
tal_net_send(sock_fd, msg, strlen(msg));
tal_net_close(sock_fd);
TCP 서버를 위해, 사용examples/protocols/tcp_server (tal_net_bind, tal_net_listen, tal_net_accept, tal_net_recv).
UDP 전송 및 수신
UDP 소켓 만들기PROTOCOL_UDP. 알려진 호스트에 보내는 간단한 unicast 클라이언트를 위해 한 답변을 읽습니다.
#include "tal_network.h"
#define LOCAL_PORT 45000
#define REMOTE_PORT 45001
int udp_fd = tal_net_socket_create(PROTOCOL_UDP);
if (udp_fd < 0) {
PR_ERR("udp create failed");
return;
}
TUYA_IP_ADDR_T local_ip = tal_net_str2addr("192.168.1.50"); /* your interface address */
if (tal_net_bind(udp_fd, local_ip, LOCAL_PORT) < 0) {
PR_ERR("bind failed");
tal_net_close(udp_fd);
return;
}
const char payload[] = "ping";
TUYA_IP_ADDR_T peer_ip = tal_net_str2addr("192.168.1.100");
tal_net_send_to(udp_fd, payload, strlen(payload), peer_ip, REMOTE_PORT);
char rx[256];
TUYA_IP_ADDR_T from_addr = 0;
uint16_t from_port = 0;
TUYA_ERRNO n = tal_net_recvfrom(udp_fd, rx, sizeof(rx), &from_addr, &from_port);
if (n > 0) {
PR_DEBUG("got %d bytes from port %u", (int)n, (unsigned)from_port);
}
tal_net_close(udp_fd);
기타 제품local_ip바인딩하려는 인터페이스의 IPv4 주소로; 정확한 값은 netmgr 또는 정적 구성에 따라 달라집니다.
UDP 방송 참조
방송 (AP 서브넷에서 주기적인 beacon)는 구현examples/wifi/ap/src/example_wifi_ap.c: tal_net_socket_create(PROTOCOL_UDP), tal_net_bind, tal_net_set_broadcast·tal_net_send_to이름 *0xFFFFFFFF그리고 선택된 항구.
구현 노트
- 반환 값
tal_net_connect,tal_net_send,tal_net_send_to·tal_net_recvfrom; 부정적인 값은 접합기 당 과실을 나타냅니다. - 제품 정보
tal_net_set_block또는tal_net_selecttimeouts 또는 non-blocking I/O를 필요로 하는 경우에. - TCP는 연결 지향; UDP는 datagram 기반입니다 — 각각
tal_net_send_to스택 파편이 없는 한 패킷입니다.
이름 *
- TCP 클라이언트:
examples/protocols/tcp_client/src/example_tcp_client.c - TCP 서버:
examples/protocols/tcp_server - UDP 방송:
examples/wifi/ap/src/example_wifi_ap.c - API:
src/tal_network/include/tal_network.h - Wi-Fi 스테이션 튜토리얼
- 예제 인덱스