날뛰는 코드

라즈베리파이에 소켓 통신 서버만들기 (17/08/25) 본문

라즈베리파이

라즈베리파이에 소켓 통신 서버만들기 (17/08/25)

미 냉 2017. 8. 25. 20:26

* 기존 임베디드 수업 때 만들었던 소켓 통신용 서버를 이식해볼까 한다.

 

* 라즈베리파이 서버 코드

 

그냥 테스트용이라 클라이언트 하나 받고 받은 문자열을 그대로 출력해준다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <iostream>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
 
 
#define BUF_SIZE 512
#define MAX_BUF 32
 
using namespace std;
 
int main(int argc, char*argv[])
{
    int server_fd, client_fd;
    char buffer[BUF_SIZE];
    struct sockaddr_in server_addr, client_addr;
    char temp[20];
    int msg_size;
    socklen_t len;
 
    //    if (argc != 3) {
    //        printf("Usage : %s <port>\n", argv[0]);
    //        exit(1);
    //    }
 
 
    if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
    {// 
        cout << "Server : Can't open stream socket\n";
        exit(0);
    }
    //server_Addr 을 NULL로 초기화
    memset(&server_addr, 0x00sizeof(server_addr));
 
    //server_addr 셋팅
    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    server_addr.sin_port = htons(9000);
 
    if (bind(server_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) <0)
    {//bind() 호출
        cout << "Server : Can't bind local address.\n";
        exit(0);
    }
 
    if (listen(server_fd, 5< 0)
    {//소켓을 수동 대기모드로 설정
        cout << "Server : Can't listening connect.\n";
        exit(0);
    }
    memset(buffer, 0x00sizeof(buffer));
    len = sizeof(client_addr);
    cout << "Server : wating connection request.\n";
    client_fd = accept(server_fd, (struct sockaddr *)&client_addr, &len);
    inet_ntop(AF_INET, &client_addr.sin_addr.s_addr, temp, sizeof(temp));
    cout << "Server : %s client connected.\n", temp;
    while (1)
    {
 
        if (client_fd < 0)
        {
            cout << "Server: accept failed.\n";
            return 0;
        }
 
        msg_size = read(client_fd, buffer, 1024);
        cout << buffer << endl;
        if (!strcmp(buffer, "fin"))
        {
            cout << "fin\n";
            return 0;
        }
 
 
        memset(buffer, 0x00sizeof(buffer));
    }
    close(server_fd);
    return 0;
}
cs

 

 

전역변수로 된거 몇개 바꾸고 필요한거만 참조 하니까 돌아간다.

 

임베디드떄 쓴 보드가 너무 꾸렸어..

 

그냥 같은 회선 통신 테스트라

 

ifconfig로 ip확인하고

 

ping 잘가나 보고

오 잘감

 

클라이언트에 ip,포트 설정해준다.

 

 

*결과

 

잘된당

 

* 클라이언트는 첨부

 

프로젝트파일은 너무커서 안올라가네

GUITCPClient.zip

 

 

- 이제 안드로이드 폰에서 클라이언트 만들고 통신테스트 해봐야지

- lte로 되려면 고정아이피 해서 포팅도해야되나 모르겠군 아직

 

 

 

http://intellegibilisverum.tistory.com/entry/%ED%8B%B0%EC%8A%A4%ED%86%A0%EB%A6%AC%EC%97%90-%EC%BD%94%EB%93%9C-%EC%9E%85%EB%A0%A5%ED%95%98%EA%B8%B0

 

위 링크에서 https://colorscripter.com/pcver 코드 입력하는거 가져왔는데 깔끔하네

Comments