---
title: "getSn_SR(TCP_CLIENT_SN);"
url: "https://maker.wiznet.io/forum/15914"
markdown_url: "https://maker.wiznet.io/forum/15914/md"
type: "Forum topic"
category: "IO Modules"
author: "yjs1025"
created: "2025-10-20T11:16:48+09:00"
last_activity: "2025-10-20T14:42:18+09:00"
language: "en"
views: 5
replies: 1
source: "WIZnet Makers forum (https://maker.wiznet.io/forum/)"
---

# getSn_SR(TCP_CLIENT_SN);

## Question

Asked by yjs1025 on 2025-10-20 in IO Modules.

3) Link and network
You already call w5500_check_link(); also verify:
- PC IP: 192.168.200.2
- W5500 IP: 192.168.200.123
- Subnet mask: 255.255.255.0 on both
- Gateway 192.168.200.1 is fine for same subnet, but not required if both are on the same switch
- Ensure the PC firewall allows inbound on the chosen server port

// 1. 소켓 오픈
/* #define TCP_CLIENT_SN 0
int8_t socket(uint8_t sn, uint8_t protocol, uint16_t port, uint8_t flag);
SN --> W5500 소켓 번호 (0 ~ 7)
protocol --> 소켓 모드 선택 (Sn_MR_TCP, Sn_MR_UDP, Sn_MR_MACRAW 등)
Sn_MR_TCP --> 0X01 (TCP)*/
if (socket(TCP_CLIENT_SN, Sn_MR_TCP, 21, 0) != TCP_CLIENT_SN) { // pc서버 프로그램은 port 21 사용
SEGGER_RTT_WriteString(0, "socket() oepn : failed\r\n");
}
else
{
SEGGER_RTT_WriteString(0, "socket() oepn : Success\r\n");
}
nrf_delay_ms(1000);

wait_ms=0;
while (1)
{
qtime_msleep_yield(5000);
ret_val = getSn_SR(TCP_CLIENT_SN);
if (ret_val == SOCK_INIT)
{
SEGGER_RTT_printf(0, "%d socketg is --> SOCK_INIT: 0x%x\r\n", TCP_CLIENT_SN, ret_val);
break;
}
if (wait_ms++ > 200) {
SEGGER_RTT_printf(0, "\r\n check SOCK_INIT is timeout.\r\n");
break;
}

}

// 2. 서버 연결 시도
/* int8_t connect(uint8_t sn, uint8_t *addr, uint16_t port);
sn 은 W5500 내부에 존재하는 하드웨어 소켓 채널 번호 .... 0 ~ 7 (총 8개 존재)
TCP_CLIENT_SN = 0
- getSn_SR은 포트 번호가 아닌 소켓 번호(0~7)를 사용합니다.

*/
SEGGER_RTT_printf(0, "Connecting to server...\r\n");
// pc서버 프로그램은 port 21 사용
ret_val = connect(TCP_CLIENT_SN, server_ip, 21); // #define SERVER_PORT 21
if (ret_val != SOCK_OK) {
SEGGER_RTT_printf(0, "Connecting to server --> failed: %d\r\n", ret_val);
close(TCP_CLIENT_SN);

}
else{
SEGGER_RTT_printf(0, "Connecting to server --> sucess: %d\r\n", ret_val);
}

// 3. 연결 완료 대기
/* uint8_t getSn_SR(uint8_t sn);
// 지정된 **소켓 번호(sn)**의 상태 레지스터(Sn_SR)를 읽어서 반환
*/
while (ret_val != SOCK_ESTABLISHED)
{
qtime_msleep_yield(200);
ret_val = getSn_SR(TCP_CLIENT_SN);
//SEGGER_RTT_printf(0, "ret_val = 0x%x\r\n", ret_val);

if (ret_val == SOCK_CLOSED)
{
SEGGER_RTT_printf(0, "\r\nSocket closed\r\n");
break;
}
if (ret_val == SOCK_CLOSE_WAIT)
{
SEGGER_RTT_printf(0, "\r\nSocket closed while waiting.\r\n");
break;
}
if (wait_ms++ > 200) {
SEGGER_RTT_printf(0, "\r\nConnect timeout.\r\n");
break;
}
qtime_msleep_yield(50);
}
if (ret_val == SOCK_ESTABLISHED) {
SEGGER_RTT_printf(0, "\r\nConnected to server!\r\n");
}

## Replies

### Reply 1 by Grace_Koo, 2025-10-20

안녕하세요.

혹시 올려주신 코드 실행 시
`SEGGER_RTT_printf(0, "\r\nConnected to server!\r\n");`
메시지가 출력되지 않고 다른 메시지가 출력된다는 말씀이실까요?

맞으시다면 해당 동작을 함께 확인해보겠습니다.

감사합니다.

---

Source: https://maker.wiznet.io/forum/15914
