안녕하세요...
소켓통신을 책을 보면서 해보는데요...잘 안되네요...
설명 부탁합니다.
컴퓨터 host ip :192.168.0.3
aesop target ip:192.168.0.21
입니다.
vmware에서 리눅스를 실행해서 nfs를 통해서 부팅 이미지를 가지고 오고 있습니다.
리눅스 ip:192.168.0.10 입니다.
client_test.c
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
//#include <uninstd.h>
#define PORT 7777
#define BUFSIZE 1024
main(int argc, char *argv[])
{
int sockfd;
struct sockaddr_in servAddr; /* connector's address information */
char sendBuffer[BUFSIZE],recvBuffer[BUFSIZE];
int recvLen;
if(argc != 2)
{
fprintf(stderr,"usage: %s IP_addressn", argv[0]);
exit(1);
}
printf("IP : %s n", argv[1]);
if((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1)
{
perror("socket failed");
exit(1);
}
printf("sockfd : %d n", sockfd);
memset(&servAddr,0,sizeof(servAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = inet_addr(argv[1]);
servAddr.sin_port = htons(PORT);
printf(" connect ... n");
if(connect(sockfd, (struct sockaddr*)&servAddr, sizeof(servAddr)) == -1) perror("connect failed");
printf(" connected ... n");
while(1)
{
printf("Input sending message ==> ");
fgets(sendBuffer,BUFSIZE,stdin);
if(!strncmp(sendBuffer,"quit",4)) break;
if(send(sockfd,sendBuffer,strlen(sendBuffer),0) != strlen(sendBuffer))
{
perror("send failed");
exit(1);
}
if((recvLen=recv(sockfd,recvBuffer,BUFSIZE-1,0)) <=0)
{
perror("recv failed");
exit(1);
}
recvBuffer[recvLen] = ' ';
printf("Received: %sn",recvBuffer);
}
close(sockfd);
exit(0);
}
위 파일을 리눅스에서
gcc -o client_i386 client_test.c
arm-linux-gcc -o client_arm client_test.c
두개의 실행 파일을 만들었습니다..
그런데 host 컴퓨터에 server gui 프로그램을 실행하고
리눅스에서 ./client_i386 192.168.0.3를 실행하면 소켓이 연결이 됩니다..
그러나 타켓보드에서 ./client_arm 192.168.0.3를 실행하면 소켓이 연결 되지 않습니다.
왜 안되는지 이유를 알려주세요...
그럼... 즐거운... 주말 되세요...
서버프로그램짤 수도 없고....
aesop-2440에서는 안해본게 없을정도로 테스트되었습니다.
당연히 socket 프로그램도 많은 테스트를 했습니다.
방화벽이나 이런것을 의심해 보는게 어떨까요?.....^^