2011-04-01 2 views
0

서로 연결을 여러 번 시도해야하는 2 개의 소켓 서버가 있습니다. 내가 한 일은 s1과 s2라는 2 개의 소켓을 만들었습니다. 특정 포트 및 주소에 s1을 바인드했습니다. while while (num_trials) < 200 루프, 서버 2에 s1과 connect()를 실행합니다. 2 개의 프로그램을 실행할 때 첫 번째 서버는 루프를 실행하고 시도하고 있지만 서로를 연결하지 않는다는 것을 보여줍니다. 두 번째 서버 한편 루프 1 시간을 입력하고 기다립니다.여러 개가 C 소켓의 서로 다른 연결에 연결

매번 s1 소켓을 닫으려고했는데 2 개의 서버가 루프되도록 만들었지 만 여전히 서로 연결하지 않습니다. 나는 몇몇 세부 사항을 놓치고 있는지 잘 모르겠다. 나는 select를 사용할 수 없다. 이것은 여러 클라이언트 연결을 받아들이는 경우가 아니다. 이것을 달성하기위한 더 좋은 방법이 있습니까?

답변

3

소켓이 기본적으로 차단됩니다. 조작을 수행하면 조작이 완료 될 때까지 블록됩니다. 따라서 소켓을 비 블로킹으로 만들거나 select (또는 다른 비동기 메커니즘)을 사용해야합니다.

또 다른 대안은 maheshgupta024에 언급 된 것처럼 다른 스레드에서 작업을 분할하는 것입니다. 예 : 서버는 주 스레드에서 실행되고 클라이언트는 보조 스레드에서 실행됩니다.

+0

관심있는 사람이 내가 찾고있는 사람 : http://www.tcpipguide.com/free/t_TCPConnectionEstablishmentProcessTheThreeWayHandsh-4.htm - 모두에게 감사드립니다. – user629034

1

두 스레드를 생성하고 서로 연결하는 방법. 하나는 listnening이어야하고 다른 하나는 포트를 연결해야합니다. 즉 S1이 포트 1000을 청취 중이라면 S2는 1000 에 연결되고 S2는 2000에서 수신 대기해야하고 S1은 2000에 연결되어야합니다.

관련 문제