본문으로 바로가기
homeimage

컴퓨터/프로그래밍

해당되는 글 307
  • thumbnail
    컴퓨터/프로그래밍

    TCP/IP 연결 끊김 해결 방법

    TCP/IP 연결 지향 프로토콜 TCP/IP를 연결 지향 프로토콜이라고 합니다. 처음 TCP/IP 소켓 프로그래밍을 학습할 때 "연결 지향 프로토콜"이라는 말이 생소해서 뭔 뜻인가 했습니다. 연결 지향? 통신이라면 당연히 연결되어야 하는 것 아닌가? TCP/IP로 통신한다고 라인을 깔아서 직접 연결한다는 것은 아닐 텐데. 연결 지향 프로토콜이란 그렇습니다. 당연히 연결 지향 프로토콜이라고 물리적으로 선을 깔아서 직접 연결하는 것은 아니고요, TCP 프로토콜이 소프트웨어적으로 상대 시스템과 통신이 끝날 때까지 연결을 유지시켜 줍니다. UDP/IP 프로토콜과 비교하면 이해하기 쉽습니다. UDP/IP는 좀 전에 A 컴퓨터에 데이터를 전송했음에도 이번에도 다음에도 A 컴퓨터로 데이터를 보내려면 매번 A 컴퓨터의..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 배열과 포인터 같다? 다르다?

    포인터 때문에 C언어가 어렵다는 분이 참 많습니다. 기계어나 어셈블리어부터 하신 분이라면 쉽게 이해하지만, 머릿속에 메모리를 그려 놓고 생각하는 것이 프로그래밍 입문자로써는 힘들 수 있습니다. 어차피 변수인데 이름에 따라 적당한 값을 넣고 뺀다고 생각하면 되는 것을 포인터라는 것은 이해했다고 싶어도 막상 프로그래밍을 하다 보면 헷갈립니다. 포인터를 정확히 이해하기 위해서는 배열과 어떤 차이가 있는지 알아야 합니다. C언어에서 배열과 포인터가 어떻게 다른지 자세히 알아보겠습니다. C언어 배열과 포인터가 같을까? C언어 코딩의 혼란스러움 더욱이 C언어의 친절함이라고 할까요? 배려 때문인지 모르지만, 배열과 함께 코딩하다 보면 더욱 헷갈립니다. 어? 코딩하는 방법이 배열이나 포인터나 똑같네. 그럼 왜 어렵게 ..
  • thumbnail
    컴퓨터/프로그래밍

    모드버스 프로토콜 작성 방법 및 주의사항

    이 글은 모드버스 프로토콜을 처음 접하면서 프로그램을 구현해야 하는 분을 위한 글입니다. 모드버스 질의에 대한 응답을 어떻게 구현하는지에 대한 설명이며, 코드를 작성하기 전에 미리 알고 있으면 헷갈리거나 헛수고를 줄일 수 있을 것으로 생각합니다. 아울러 모드버스 프로그램 작성에 도움이 되는 팁을 소개합니다. 모드버스 프로토콜 작성 시 주의 사항 모든 모드버스 Function Code를 작성해야 하나요? 결론부터 말씀드리면 아닙니다. 만일 내 장비가 온도계이고 어떤 설정도 없이 현재 온도 값만을 제공한다면 읽기 Function code 4만 작성해도 됩니다. 또는 내 장비가 조명 시스템이고 10개의 조명이 달려 있는데, 번호에 따라 On/Off를 할 수 있다면 Function code 6만 작성해도 됩니다..
  • thumbnail
    컴퓨터/프로그래밍

    리눅스 X 윈도우 GUI 응용 프로그래밍 라자루스

    리눅스 GUI 응용 프로그램을 만들어야 한다면 라자루스를 추천합니다. Qt를 사용해 본 적이 있지만, 역시 라자루스가 쉽고 빠른데 국내에서는 아는 분이 별로 없는 것 같아서 안타깝습니다. GUI 응용 프로그래밍 통합 개발 환경 라자루스를 소개하고, 어떻게 프로그램을 작성하는지 예제로 보여드리겠습니다. 래피드 애플리케이션 개발 도구 라자루스 볼랜드사 래피드 애플리케이션 개발툴 델파이 볼랜드사에서 윈도우 응용 프로그램 개발툴로 델파이를 내놓으면서 래피드 애플리케이션 개발(Rapid Application Development)을 강조했습니다. 개발자가 마이크로소프트사의 비주얼 스튜디오를 대신해서 델파이를 선택하게 하려면 그만한 이유와 장점이 있어야 하는데, 볼랜드사에서는 매우 빠른 개발 환경이라고 내세운 것이..
  • thumbnail
    컴퓨터/프로그래밍

    윈도우10 노트북 무선 와이파이 공유기로 만드는 방법

    윈도우10 노트북 무선 와이파이 공유기로 만들기 윈도우10이 설치된 노트북과 무선 와이파이 동글이가 설치된 데스크톱 컴퓨터라면 무선 공유기로 만들 수 있습니다. 물론, 윈도우11에서도 가능합니다. 요즘은 공유기가 없는 곳이 없어서 과연 이 기능을 쓸 때가 있을까 싶습니다만, 내 방의 와이파이 출력이 낮아서 잘 끊기는데 공유기를 사느니 유선 하나 끌어다가 윈도우10에 연결하고 핸드폰과 태블릿은 윈도10의 무선을 사용하게 하거나, 어쩌다 유선만 설치된 곳에서 같은 방법으로 유용하지 않을까 생각합니다. 윈도우10 무선 공유기 기능은 훌륭하고 잘 작동됩니다만, 큰 기대는 어렵습니다. 큼지막한 안테나가 달린 공유기를 보시면 아시겠지만, 노트북의 와이파이 출력이 크지 않습니다. 저의 노트북 무선 출력이 낮은지 모르..
  • thumbnail
    컴퓨터/프로그래밍

    모드버스 통신 오류 시 응답 방법

    모드버스 통신 패킷 오류 시 응답? 무시? 한 개의 통신 라인에 여러 개의 디바이스가 물린 rs485에서 통신 패킷이 깨진 데이터를 수신했을 경우 다시 보내 달라고 요청해야 할까요? 아니면 무시하고 기다려야 할까요? 답부터 말씀드리면 요청하거나 응답해서는 안 됩니다. 어? rs485 통신의 대표 프로토콜인 모드버스에는 예외 상황 코드로 응답하는 내용이 있는데?라고 반문하실 수 있습니다. 그러나 모드버스의 예외 상황 코드에는 통신 패킷 오류에 대한 내용이 없습니다. 즉, 수신된 데이터가 올바른지 CRC 값을 확인했더니 틀렸다면 그 통신 패킷은 무시해야 합니다. 1:1 통신인 rs232에서는 다시 보내 달라고 요청할 수 있어도 1:N에서는 걸러내야 합니다. 이유는 통신 패킷에 오류가 있다면 슬레이브 주소가 ..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 날짜 시간 문자열 분리 팁

    C언어 날짜 시간 문자열 분리 팁 C언어는 문자열 처리하기가 참 까다롭습니다. 문자열을 합치는 간단한 일도 메모리를 따로 생성해서 복사해야 하는데, 다른 언어에 비하면 귀찮은 작업입니다. 문자열 합치기도 이러한데, 특정 문자열에서 일부를 분리해서 새로운 문자열을 만드는 것은 더욱 귀찮아집니다. 통신으로 날짜와 시간이 섞인 문자열을 받았습니다. 그 문자열에서 날짜와 시간을 분리해서 화면에 출력하려고 합니다. 예를 들어서 "badayak.com20220920150525jwmx.tistory.com" 이런 데이터를 받으면 "데이터 날짜: 2022년 09월 20일 15시 05분 25초"로 화면에 출력하고 싶습니다. 그래서 아래와 같이 코드를 작성했습니다. C언어 memcpy() 함수 사용 #include #in..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 시리얼 통신 브레이크(break) 신호 전송 방법

    C tcsendbreak() 시리얼 통신 break 신호 전송 함수 시리얼 통신에서 브레이크(break) 신호를 보내려면 tcsendbreak() 함수를 사용하면 됩니다. 상대 쪽에서 break 신호를 주었을 때 수신 버퍼에 0x00이 있어서 0x00을 보내면 break 신호가 전송되는 줄 아는 분이 계시더군요. 이미지나 동영상처럼 바이너리 파일을 전송할 경우 0x00이 있을 수 있는데, 그때마다 break 신호가 발생해서는 안 되겠지요. 헤더 : termios.h 형태: int tcsendbreak(int fd, int duration) 인수: int fd 시리얼 포트와 연결된 파일 디스크립트 int duration 전송 시간 반환: 0 == 성공, -1 == 실패 및 errno에 에러코드 대입 int..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 printf() 숫자가 inf로 나오는 이유는

    printf() 숫자 대신에 inf 문자열이 출력? C언어에서 숫자 계산하고 화면에서 확인하려고 printf()를 실행했는데 숫자는 나오지 않고 엉뚱하게 문자로 "inf"라고 나왔다면 계산 결과가 무한대로(infinite) 숫자가 너무 크다는 뜻입니다. 한마디로 계산 중에 숫자가 너무 커져서 제대로 계산할 수 없었다는 것입니다. #include #include int main( void) { double result = pow( 1500.0, 300.0); printf( "x ^ y = %f\n", result); return 0; } 위 프로그램을 컴파일하고 실행해 보겠습니다. inf 값으로 오류 계산을 막는 방법 숫자가 너무 커서 계산을 못 했다는 것은 알겠습니다. 그렇다면 더 이상 이 결과로 다음 ..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 제곱 연산자, 기호는?

    C언어 제곱 연산자는 없다? C언어로 프로그래밍하다 보면 타 언어에 비해 이상한 것이 한둘이 아닙니다만, 그중에 하나가 제곱 구하는 연산자입니다. 결론부터 말씀드리면 C언어에서는 제곱 구하는 연산자나 기호 없습니다. 기호 ^ 이거 아냐 생각할 수 있지만, C언어에서 연산자 ^는 제곱을 구하는 것이 아니라 XOR 비트 연산자입니다. 그렇다면? pow() 계열의 함수를 사용해야 합니다. 다른 언어에서는 기호 한 번으로 쉽게 구할 수 있는 제곱을 왜 C언어에서는 함수를 사용해야 하나 의아하겠지만, 실제 코딩을 하다 보면 제곱을 구하는 것보다 XOR 연산을 더 자주 사용합니다. 이런 이유 때문에 C언어는 제곱을 구하는 연산자를 포기(?)하고 함수를 사용하게 했는지 모르겠습니다. 또한, 전혀 아니라고 하실 분이 ..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 텍스트 파일 읽기 예제

    C언어 텍스트 파일 읽기 함수 C언어에서 텍스트 파일 읽기에는 fopen() 함수로 파일을 열어서 fgets() 함수를 사용하는 것이 편합니다. open() 함수로 파일을 열어서 read() 함수로 파일을 읽을 수 있지만, 텍스트 파일 읽기는 fopen()와 fgets() 조합이 편한 것은 한 줄씩 읽을 수 있어서입니다. read() 함수와 fgest() 함수 둘 다 파일 내용을 받을 수 있는 버퍼를 지정하고 버퍼 크기까지 알려 주지만, 차이라면 read() 함수는 버퍼 크기보다 파일 사이즈가 크다면 버퍼 크기만큼 읽어서 버퍼에 저장합니다. 이에 비해 gets()는 버퍼 크기만큼 파일의 내용을 읽되 한 줄의 끝을 만나면 거기까지만 담습니다. 텍스트 파일의 경우 줄 단위로 읽어서 처리하는 경우가 많기 때문..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 텍스트 파일 읽기 예제

    C언어 텍스트 파일 읽기 함수 C언어에서 텍스트 파일 읽기에는 fopen() 함수로 파일을 열어서 fgets() 함수를 사용하는 것이 편합니다. open() 함수로 파일을 열어서 read() 함수로 파일을 읽을 수 있지만, 텍스트 파일 읽기는 fopen()와 fgets() 조합이 편한 것은 한 줄씩 읽을 수 있어서입니다. read() 함수와 fgest() 함수 둘 다 파일 내용을 받을 수 있는 버퍼를 지정하고 버퍼 크기까지 알려 주지만, 차이라면 read() 함수는 버퍼 크기보다 파일 사이즈가 크다면 버퍼 크기만큼 읽어서 버퍼에 저장합니다. 이에 비해 gets()는 버퍼 크기만큼 파일의 내용을 읽되 한 줄의 끝을 만나면 거기까지만 담습니다. 텍스트 파일의 경우 줄 단위로 읽어서 처리하는 경우가 많기 때문..
    최근글
    이모티콘창 닫기
    울음
    안녕
    감사해요
    당황
    피폐

    이모티콘을 클릭하면 댓글창에 입력됩니다.