tcp ip로 보드와 통신하는걸 쭉 따라 해봤는데요.


tcp ip로 보드와 통신하는걸 쭉 따라 해봤는데요.tcp ip로 보드와 통신하는걸 쭉 따라 해봤는데요.


아래와 같이 해놓으니 Accept() 부분에서 잡아주고 있는 부분이 있어서 그런지 통신을 하나만 가능하더군요.


테스트 할때는  TESTServer 와 TCPfileUpDateServer 둘 중 하나를 주석 처리해 놓아서 그런지

(각각 아이피만 같고 포트가 다릅니다.)

두개 다 동시에 서버 접속이 가능했었는데 주석 처리를 풀어 놓고 테스트를 하니 한 개의 서버만 접속이 가능하네요.


다른 기능의 서버를 1~2개 더 추가하고 싶은데 이걸 어떻게 해야할지 모르겠네요. 


각 서버들은 select 모델 등으로 구현한건 아니고 


네트워크 프로그래밍 강좌에 나온 것 처럼 bind-> connect -> accept -> (recv -> send) 로 구성되어 있습니다.

(아래는 윈도우 tcp/ip 소켓 프로그래밍 책을 참조하여 

보드에서 멀티 쓰레드 서버를 흉내내 봤습니다. 제대로 한건지 모르겠네요.)



void main( void )

{
/* Setup any hardware that has not already been configured by the low
level init routines. */
prvSetupHardware();  //plz check while loop break.
RTC_Init();
xSerialPortInitMinimal( mainCOM_TASK_BAUD_RATE, comBUFFER_LEN , UART1); //UART1 use

vIRQInit();
vLogicTasks(mainLOGIC_TASK_PRIORITY);
/* Start either the uIP TCP/IP stack or the lwIP TCP/IP stack. */

vlwIPInit();
sys_set_state( ( signed char * ) "LwIpSocket", lwIpTCP_CLIENT_STACK_SIZE );
sys_thread_new( vBasicTCPServer, ( void * ) NULL, lwIpTCP_CLIENT_PRIORITY );
tHandle1 = sys_thread_new( TCPServerRX, ( void * ) NULL, lwIpTCP_SERVER_PRIORITY ); 
tHandle2 = sys_thread_new( TCPServerTX, ( void * ) NULL, lwIpTCP_SERVER_PRIORITY ); 
tHandle3 = sys_thread_new( TESTServer, ( void * ) NULL, lwIpTCP_SERVER_PRIORITY +2);
tHandle4 = sys_thread_new( TCPfileUpDateServer, ( void * ) NULL, lwIpTCP_SERVER_PRIORITY +3);
sys_set_default_state();
/* Start the scheduler.
vTaskStartScheduler();

/* We should never get here as control is now taken by the scheduler. */
for( ;; ){ }; 

}



void vBasicTCPServer( void *pvParameters )

{

   extern err_t ethernetif_init( struct netif *netif );

    

    /* Parameters are not used - suppress compiler error. */

    ( void ) pvParameters;  

        

    /* Create and configure the EMAC interface. */

    IP4_ADDR( &xIpAddr, emacPUIPADDR0, emacPUIPADDR1, emacPUIPADDR2, emacPUIPADDR3 );

    IP4_ADDR( &xNetMast, emacNETMASK0, emacNETMASK1, emacNETMASK2, emacNETMASK3 );

    //IP4_ADDR( &xGateway, emacGATEWAYADDR0, emacGATEWAYADDR1, emacGATEWAYADDR2, emacGATEWAYADDR3 ;

    netif_add( &EMAC_if, &xIpAddr, &xNetMast, IP_ADDR_ANY/*&xGateway*/, NULL, ethernetif_init, tcpip_input );


    /* make it the default interface */

    netif_set_default( &EMAC_if );


    /* bring it up */

    netif_set_up(&EMAC_if);


    /* Initialize*/  


    /* Nothing else to do.  No point hanging around. */

    vTaskDelete( NULL );    

}



p.s. 텔넷 서버도 TCP/IP 소켓 프로그래밍 한 걸 기반으로 구현 해보려고 있는 중인데 

참조할 만한 예제나 아니면 주의해야 할 것 등이 있을까요?

프로토콜 볼때마다 속이 울렁 울렁. 머리속은 술렁 술렁.