앱인벤터와 C서버간 소켓 통신문제..
글쓴이: kjh05072000 / 작성시간: 수, 2014/06/04 - 6:37오후
#include <stdio.h> #include <stdlib.h> #include <stdint.h> #include <errno.h> #include "string.h" #include "time.h" #include "sys/types.h" #include "sys/socket.h" #include "netinet/in.h" //소켓 프로그래밍에 사용될 헤더파일 선언 #define BUF_LEN 128 //메시지 송수신에 사용될 버퍼 크기를 선언 int main(int argc, char *argv[]) { char buffer[BUF_LEN]; struct sockaddr_in server_addr, client_addr; char temp[20]; int server_fd, client_fd; //server_fd, client_fd : 각 소켓 번호 int len, msg_size; if(argc != 2) { printf("usage : %s [port]\n", argv[0]); exit(0); } if((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {// 소켓 생성 printf("Server : Can't open stream socket\n"); exit(0); } memset(&server_addr, 0x00, sizeof(server_addr)); //server_Addr 을 NULL로 초기화 server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = htonl(INADDR_ANY); server_addr.sin_port = htons(atoi(argv[1])); //server_addr 셋팅 if(bind(server_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) <0) {//bind() 호출 printf("Server : Can't bind local address.\n"); exit(0); } if(listen(server_fd, 5) < 0) {//소켓을 수동 대기모드로 설정 printf("Server : Can't listening connect.\n"); exit(0); } memset(buffer, 0x00, sizeof(buffer)); printf("Server : wating connection request.\n"); len = sizeof(client_addr); while(1) { client_fd = accept(server_fd, (struct sockaddr *)&client_addr, &len); if(client_fd < 0) { printf("Server: accept failed.\n"); exit(0); } inet_ntop(AF_INET, &client_addr.sin_addr.s_addr, temp, sizeof(temp)); printf("Server : %s client connected.\n", temp); msg_size = read(client_fd, buffer, 1024); printf("%s", buffer); write(client_fd, buffer, msg_size); close(client_fd); printf("Server : %s client closed.\n", temp); } close(server_fd); return 0; }
C 서버를 통해서
클라이언트를 안드로이드 앱을 이용하려고 하는데..
우선 통신은 되는것 같은데.
데이터 주고받는게 잘 안되네요..
문자열로 주고 받으려고 하는데..
앱인벤터로 입력값을 주면
그림과 같이 출력되고
제대로 입력값이 나오지 않습니다..
뭐가 문제인지 잘 모르겠네요;;
Forums:
알려쥬세오
해결하셨는지가 궁금해여. 해결하셨다면 어떻게 했는지 알 수 잇을까요?
요즘 컴퓨터가 워낙 쓰기 쉬운 물건이 되다 보니
요즘 컴퓨터가 워낙 쓰기 쉬운 물건이 되다 보니 프로그래밍을 익히는 사람들조차도 컴퓨터를 너무 만만히 보는 게 아닌가 싶어요. 그러면 안될텐데요.
1. read를 호출했을 때 내가 원하는 만큼의 데이터가 수신되지 않을 수도 있습니다.
2. write를 호출했을 때 내가 원하는 만큼의 데이터가 송신되지 않을 수도 있습니다.
3. tcp socket이 제공해주는 건 지정된 바이트열을 송수신해주는 기능뿐입니다. 어플리케이션에서 의미있는 데이터를 바이트열로 나타내거나 다시 해석하는 코드는 별도로 필요합니다.
(본 질문글처럼 문자열 등 plain한 데이터라면 아무래도 상관없지만요.)
대체로 초보 네트워크 프로그래머가 작성한 프로그램이 의도대로 돌지 않는 경우 위 3가지 중 하나 이상을 간과한 경우가 많습니다. 물론 다른 문제가 더 있을 수도 있지만 일단 이것부터 해결하고 봅시다.
이거 통신 어떻게 하나여???자세히 알고 싶은데.,,
이거 통신 어떻게 하나여???자세히 알고 싶은데.,,,
댓글 달기