서버 소켓 포트 생성 및 번호 질문

(1) 소켓 4개 제한인 w5100 제품으로 TCP 통신을 하고 있는데
아래처럼 꼭 포트를 다르게 사용해야하는 것인가요?

서버소켓#1 (포트:1003) <—> 클라이언트#1
서버소켓#2 (포트:1004) <—> 클라이언트#2
서버소켓#3 (포트:1005) <—> 클라이언트#3
서버소켓#4 (포트:1006) <—> 클라이언트#4

(2) 일반적으로 서버 포트는 같은 번호로 클라이언트가 접속하는 것이지요.
그래서 저희가 원하는 것은 아래와 같이 같은 포트 번호를 사용하는 것인데
구현이 불가능한 것인가요?

서버소켓#1 (포트:1003) <—> 클라이언트 N개

(3) 조금 검색해보니 소프트웨어로 TCP 서버 통신을 구현해야한다는 얘기가 있는것 같습니다.
(다수의 클라이언트가 w5500 서버에 접속 소켓 생성방법 - #2 by Edward)
그래서 아래와 같이 대략적인 시나리오를 생각해 봤습니다.
그런데 과연 이런 과정이 가능한지가 우선 궁금하구요.
클라이언트 입장에서 소켓 처리 관련해서 바뀌는 것이 없어야하는데 구현 가능성이 있습니까?
아니면 다른 방법이나 예제가 있으면 알려주세요.

a. 서버소켓#1 (포트:1003) 에 클라이언트#1이 접속한다.
b. 서버소켓#1은 접속된 클라이언트#1와 내부 서버소켓#2와 연결시킨다.
c. 서버소켓#1은 접속된 클라이언트#1을 끊고 새로운 클라이언트를 대기한다.
d. 서버소켓#1에 클라이언트#2가 접속한다.
e. 서버소켓#1은 접속된 클라이언트#2와 내부 서버소켓#3와 연결시킨다.
f. 서버소켓#1은 접속된 클라이언트#2을 끊고 새로운 클라이언트를 대기한다.
g. 클라이언트#3,4도 동일하게 반복

안녕하세요.

W5100 or W5500, 저희 칩 모두 소켓 통신은 1:1방식입니다.
그리고 TCP 통신 프로토콜은 1:1로 연결하여 지원합니다.
따라서 말씀하신대로 각 소켓의 포트를 다르게 구성해주셔야 합니다.
W5100은 하나의 IP를 가지고 있고 내부 소켓에서 포트를 이용하여 각 소켓에 접속하기 때문입니다.

위에 말씀드렸던 바와 같이 저희 칩은 다수의 클라이언트를 접속할 수 없습니다.
이유는 저희 칩 자체가 하드웨어적으로 Fix되어 있는 기능이기 때문입니다.

기능 구현에 대한 것은 말씀하신대로 하면 됩니다.
a. 서버소켓#1 (포트:1003) 에 클라이언트#1이 접속한다.
c. 서버소켓#1은 접속된 클라이언트#1을 끊고 새로운 클라이언트를 대기한다.
d. 서버소켓#1에 클라이언트#2가 접속한다.
f. 서버소켓#1은 접속된 클라이언트#2을 끊고 새로운 클라이언트를 대기한다.
g. 클라이언트#3,4도 동일하게 반복

감사합니다.

답변 감사합니다.

서버소켓 시나리오 추가 질문입니다.
참고로 클라이언트는 동시 접속하는 상황입니다.

서버소켓#1에 접속된 클라이언트#1 접속을 끊고
서버 내부소켓#2로 바인딩하는 것이 가능하다는 말씀이죠?

결국 클라이언트 입장에서는 첫 1003포트와의 접속이 끊기고 새로운 포트(1004)로 바인딩되는 것인가요?
이렇게되면 근본적으로 제가 원했던 (2)번항을 만족할 수는 없겠네요. 단지 흉내만 낼 뿐인 것 같습니다.

안녕하세요.

서버의 경우, 처음 소켓을 initial하고 open할 때, 포트를 정하고 제작합니다.
그러면 클라이언트는 서버의 정해진 포트에 맞춰 접속만 하면 됩니다.
다시 말씀드리지만, 저희 소켓 자체가 TCP사용 시 1:1통신밖에 안됩니다.
UDP 통신을 사용하면 1:N이 가능합니다. 다만, UDP로 통신할 경우 소프트웨어적으로 처리가 필요합니다.

예시를 보여드리면, (소켓 전부 사용하는 경우)

서버 동작 (ip: 192.168.0.100)
서버 소켓#1 (1002포트) - Listen (접속 대기 상태)
서버 소켓#2 (1003포트) - Listen (접속 대기 상태)
서버 소켓#3 (1004포트) - Listen (접속 대기 상태)
서버 소켓#4 (1005포트) - Listen (접속 대기 상태)

위 처럼 1개의 IP에 소켓 하나당 하나의 포트를 가진 소켓들을 만들 수 있습니다.
그러면 여기에서 서버소켓#1 (1002포트)에 클라이언트가 접속이되면 아래와 같이 변경됩니다.
서버 동작 (ip: 192.168.0.100)
서버 소켓#1 (1002포트) - Connect
서버 소켓#2 (1003포트) - Listen (접속 대기 상태)
서버 소켓#3 (1004포트) - Listen (접속 대기 상태)
서버 소켓#4 (1005포트) - Listen (접속 대기 상태)

이 상태에서 1개의 클라이언트가 추가로 접속하게 되면 아래 같이 됩니다.
서버 동작 (ip: 192.168.0.100)
서버 소켓#1 (1002포트) - Connect
서버 소켓#2 (1003포트) - Connect
서버 소켓#3 (1004포트) - Listen (접속 대기 상태)
서버 소켓#4 (1005포트) - Listen (접속 대기 상태)

그리고 서버 소켓#1과 클라이언트의 연결을 끊으면 다시 Listen(접속 대기 상태)로 전환됩니다.
서버 동작 (ip: 192.168.0.100)
서버 소켓#1 (1002포트) - Listen (접속 대기 상태)
서버 소켓#2 (1003포트) - Connect
서버 소켓#3 (1004포트) - Listen (접속 대기 상태)
서버 소켓#4 (1005포트) - Listen (접속 대기 상태)

감사합니다.