Создаю сокет и пытаюсь подключиться к серверу. Сервером выступает компьютер.
На компьютере запускаю Hercules -> TCP Server -> Port 8200 (SERVER_PORT_NUM) -> Listen. Сервер бежит.
На стороне прибора
Код
STATUS TCP_ClientConnect (char *serverName, int *soc_desc)
{
struct sockaddr_in serverAddr; /* server's socket address */
int sockAddrSize; /* size of socket address structure */
int sFd; /* socket file descriptor */
/* create client's socket */
if ((sFd = socket (AF_INET, SOCK_STREAM, 0)) == ERROR)
{
//perror ("socket");
printf ("SOCKET ERROR\n");
return (ERROR);
}
/* bind not required - port number is dynamic */
/* build server socket address */
sockAddrSize = sizeof (struct sockaddr_in);
bzero ((char *) &serverAddr, sockAddrSize);
serverAddr.sin_family = AF_INET;
serverAddr.sin_len = (u_char) sockAddrSize;
serverAddr.sin_port = htons (SERVER_PORT_NUM);
if (((int)(serverAddr.sin_addr.s_addr = inet_addr (serverName)) == ERROR) &&
((int)(serverAddr.sin_addr.s_addr = hostGetByName (serverName)) == ERROR))
{
printf ("UNKNOWN SERVER NAME\n");
close (sFd);
return (ERROR);
}
/* bind a port number to the socket */
if (bind(sFd, (struct sockaddr *) &serverAddr, sizeof(serverAddr)) == ERROR)
{
printf("BIND ERROR\n");
return (ERROR);
}
/* connect to server */
if (connect (sFd, (struct sockaddr *) &serverAddr, sockAddrSize) != OK)
{
printf ("CONNECTION ERROR\n");
close (sFd);
return (ERROR);
}
*soc_desc = sFd;
return (OK);
}
{
struct sockaddr_in serverAddr; /* server's socket address */
int sockAddrSize; /* size of socket address structure */
int sFd; /* socket file descriptor */
/* create client's socket */
if ((sFd = socket (AF_INET, SOCK_STREAM, 0)) == ERROR)
{
//perror ("socket");
printf ("SOCKET ERROR\n");
return (ERROR);
}
/* bind not required - port number is dynamic */
/* build server socket address */
sockAddrSize = sizeof (struct sockaddr_in);
bzero ((char *) &serverAddr, sockAddrSize);
serverAddr.sin_family = AF_INET;
serverAddr.sin_len = (u_char) sockAddrSize;
serverAddr.sin_port = htons (SERVER_PORT_NUM);
if (((int)(serverAddr.sin_addr.s_addr = inet_addr (serverName)) == ERROR) &&
((int)(serverAddr.sin_addr.s_addr = hostGetByName (serverName)) == ERROR))
{
printf ("UNKNOWN SERVER NAME\n");
close (sFd);
return (ERROR);
}
/* bind a port number to the socket */
if (bind(sFd, (struct sockaddr *) &serverAddr, sizeof(serverAddr)) == ERROR)
{
printf("BIND ERROR\n");
return (ERROR);
}
/* connect to server */
if (connect (sFd, (struct sockaddr *) &serverAddr, sockAddrSize) != OK)
{
printf ("CONNECTION ERROR\n");
close (sFd);
return (ERROR);
}
*soc_desc = sFd;
return (OK);
}
И запускаю таск
Код
int socket_descriptor=0;
char *server_ip = "10.0.0.80";
void tSpectraTaskEntryPoint()
{
if (TCP_ClientConnect(server_ip, &socket_descriptor)==ERROR)
printf ("CLIENT CONNECT ERROR\n");
else
printf("CLIENT CONNECT OK descriptor = %d\n", socket_descriptor);
SpectraMain();
}
char *server_ip = "10.0.0.80";
void tSpectraTaskEntryPoint()
{
if (TCP_ClientConnect(server_ip, &socket_descriptor)==ERROR)
printf ("CLIENT CONNECT ERROR\n");
else
printf("CLIENT CONNECT OK descriptor = %d\n", socket_descriptor);
SpectraMain();
}
Получаю ошибку
BIND ERROR
CLIENT CONNECT ERROR
Значит не выполняется привязка сокета к серверу? Я что то не так делаю?