상세 컨텐츠

본문 제목

modbusTCP client linux c code 예제

Linux

by 힐둔 2023. 3. 21. 04:00

본문

여러개의 device가 연결 되어 있을 때 간단히 확인 하는 코드 입니다.

 

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

#define MB_TCP_PORT 502

int main(int argc, char *argv[]) {
    int sockfd;
    struct sockaddr_in serv_addr;
    char *ip_addr;
    
    if (argc < 2) {
        fprintf(stderr, "Usage: %s <IP address>\n", argv[0]);
        exit(EXIT_FAILURE);
    }
    
    ip_addr = argv[1];
    fprintf(stderr, "ipaddress : %s\n",ip_addr);

    // 소켓 생성
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0) {
        perror("ERROR opening socket");
        exit(EXIT_FAILURE);
    }
    
    // 서버 주소 설정
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_port = htons(MB_TCP_PORT);
    serv_addr.sin_addr.s_addr = inet_addr(ip_addr);
  //a if (inet_pton(AF_INET, ip_addr, &serv_addr.sin_addr) <= 0) {
  //      fprintf(stderr, "Invalid IP address: %s\n", ip_addr);
  //      exit(EXIT_FAILURE);
  //  }
    
    // 연결 시도
    if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
        perror("ERROR connecting");
        exit(EXIT_FAILURE);
    }
    
    // 연결 성공
    fprintf(stderr,"Success to Connected  %s\n\n", ip_addr);
    
    // 소켓 닫기
    close(sockfd);
    
    return 0;
}

 

빌드 및 테스트

gcc modbustest.c
./a.out 192.168.102.11

 

여러개의 포트를 확인하기 위해서 아래와 같은 shell script 추가 (파일명 check_connection.sh)

./a.out 192.168.102.11
./a.out 192.168.102.12
./a.out 192.168.102.13
./a.out 192.168.102.14
./a.out 192.168.102.15
./a.out 192.168.102.16
./a.out 192.168.102.17
./a.out 192.168.102.18

 

스크립트 실행하여 확인

./check_connection.sh


                    

관련글 더보기

댓글 영역