RTCS TCP/IP socket client setup trouble

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 
已解决

RTCS TCP/IP socket client setup trouble

跳至解决方案
3,617 次查看
khoanguyen
Contributor I

Hi,

I'm currently working with MQX 3.8.1, Codewarrior 10.2, and the Kinetis K60 tower module, and I'm having trouble connecting using my tower as a client to my laptop. I was wondering if anyone could tell me what I'm doing wrong.

Setup:

  • Set laptop ethernet port to IP: 192.168.3.101 and gateway: 192.168.3.1
  • trying to open a socket on the K60 to act as a client to my laptop (acting as a server)
  • attempting to reach any website to prove that it works, google.com or any website

What does work so far:

  • Ethernet connection is successful and RTCS is up and running (started a new MQX project and added RTCS/shell support which ran successfully)
  • I set up an error checking for binding the socket and it didn't hit the error so I'm assuming that binding works.

Problems:

  • Hit error message for connecting the socket so it isn't connecting the socket.

Questions:

  1. Is the destination IP address supposed to be the IP for google or the server. (I tried using 192.168.1.101 which is the IP of my server but that failed)
  2. what is being assigned to these declarations (i've noticed these keep popping up in numerous examples)
    1.   _ip_address   ipaddr;
    2. socketaddr_in    addr;
  3. Are there any other examples besides the Twitter example and the socket training video/pdf? These seem to have more examples for the server side but I'm trying to set up the K60 as a client to a database later on.

Code:

#define HOST   "google.com"
#define DESTIP   IPADDR(192,168,3,1)

#define ENET_DEVICE 0

#define RTCS_DHCP 0

#define ENET_IPADDR IPADDR(192,168,3,101)

#define ENET_IPMASK IPADDR(255,255,255,0)

#define ENET_GATEWAY IPADDR(192,168,3,1)

#define RTCS_PPP 0


void connect_task(uint_32 initial_data)

{

    _ip_address     ipaddr;

    uint_32            sock;

    uint_32            result;

    sockaddr_in        addr;

    char*            test = "This is a test for data stream";

   

    while(1)

    {

        if (_mutex_lock(&print_mutex) != MQX_OK)

            {

                printf("Mutex lock failed.\n");

                _task_block();

            }   

    rtcs_init();

   

    addr.sin_family     = AF_INET;

    addr.sin_port        = 80;

    addr.sin_addr.s_addr = DESTIP;

   

    sock = socket(AF_INET, SOCK_STREAM, 0);

    result = bind(sock, &addr, sizeof(addr));

    if(result != RTCS_OK)

    {

        printf("ERROR the socket could not be bound");

        return;

    }

   

    addr.sin_port = 80;

   addr.sin_addr.s_addr = ipaddr;

   

    result = connect(sock, &addr, sizeof(addr));

    if(result != RTCS_OK)

        {

            printf("ERROR the socket could not CONNECT");

        }

    else

    {

        printf("Connected to %lx, port %d",addr.sin_addr.s_addr, addr.sin_port);

    }

   

    printf("\nREADY TO SEND DATA!!!!!!!!!!!!!!!!!");

   

    _mutex_unlock(&print_mutex);

    _task_block();

    }

}



Thanks,


Khoa Nguyen

标签 (1)
标记 (5)
0 项奖励
回复
1 解答
1,628 次查看
Luis_Garabo
NXP TechSupport
NXP TechSupport

Perhaps you have a firewall preventing the port to be available for connections. Try to disable the firewall of internet security programs.

I have created and example that I have tested with Socketest. I am attaching here. It is pretty simple. It sends data from the socket to the serial and from the serial to the socket.

Hope this helps.

Regards,

-Garabo

在原帖中查看解决方案

0 项奖励
回复
4 回复数
1,628 次查看
Luis_Garabo
NXP TechSupport
NXP TechSupport

Hi Khoa,

Perhaps this appnote can help you http://cache.freescale.com/files/microcontrollers/doc/app_note/AN4417.pdf

The source code is provided here:

http://cache.freescale.com/files/microcontrollers/doc/app_note/AN4417SW.zip

this code is doing the same you are trying. Crop the code that does the socket negotiation and let me know if worked.

Good luck,

Best Regards,

Garabo

1,628 次查看
khoanguyen
Contributor I

Hi,

I've already referred to this AN for reference and I'm able to establish a TCP connection to a designated endpoint but the send function for sockets is blocking because the connection hasn't been accepted. Is there a program I can use to test this? I've using a program called SocketTest v3.0.0 which created a server TCP socket on my windows laptop to listen for incoming connections but it didn't seem to work.

Also, since the send function is blocked, due to not having a server accept the connection, will the function automatically go back into ready whenever the connection is accepeted?

Thanks,

Khoa Nguyen

0 项奖励
回复
1,628 次查看
oscarguallar
Contributor I

Hi Khoa,

I have the same issue that you had with the TCP/IP socket. The connection is not accepted,, then blocks the task.

How did you fix the problem?

Thanks.

Oscar


0 项奖励
回复
1,629 次查看
Luis_Garabo
NXP TechSupport
NXP TechSupport

Perhaps you have a firewall preventing the port to be available for connections. Try to disable the firewall of internet security programs.

I have created and example that I have tested with Socketest. I am attaching here. It is pretty simple. It sends data from the socket to the serial and from the serial to the socket.

Hope this helps.

Regards,

-Garabo

0 项奖励
回复