2014-09-14 3 views
-1

나는 포트 청취가 어떻게 작동하는지 궁금해하고 있었다. 나는 언제나 새로운 "무언가"를 찾는 루프만을 이미지화 할 수 있습니다. 그러나 그것은 나에게 매우 비효율적입니다.포트 수신은 어떻게 작동합니까?

도움이되는 경우 : 구체적인 문제는 두 대의 컴퓨터와 서버가 있다는 것입니다. 첫 번째 컴퓨터는 데이터를 생성하여 서버에 저장합니다. 내 프로그램 - 두 번째 컴퓨터에서 프로그래밍하고 싶습니다. 서버를 만들 때 항상 서버에서 새 파일을 읽어야합니다. 데이터 작성 소프트웨어는 LabVIEW로 작성되었으며 내 프로그램은 C++/Qt 애플리케이션입니다. 내 생각은 포트에서 파일을 수신하거나 정보 만 서버 폴더에서 수신하는 것입니다. (거기에 저장해야합니다.)

추가 질문 : 포트 청취/이해에 더 깊이 파고 들거나 서버 폴더에서 새 파일을 확인하는 것이 효율적일까요? n 밀리 초?

+1

이것은 약간 벗어난 주제이므로 [programmers.stackexchange.com] (http://programmers.stackexchange.com/)에 문의하십시오. –

답변

0

몇 가지 옵션이 있습니다.

1) 파일이 변경되면 알려서 처리를 시작하려면 서버에 inotify (see here)을 사용해야합니다 (파일 시스템이 Samba를 통해 공유되는 경우 두 번째 PC에있을 수도 있음). 이것은 Linux에서 작동하지만 OS/플랫폼에 대해서는 언급하지 않았습니다.

2) "두 번째"컴퓨터에 처리 할 서버에 새 데이터가 있음을 알리기 위해 소켓이나 포트를 사용할 수 있습니다. 이 방법을 선택하면 명령 줄에서 netcat 또는 nc을 사용하여 테스트 할 수 있습니다. 그것은 Windows에서 사용할 수 있으며 거의 ​​모든 Linux 및 OSX 배포판에 설치됩니다. 두 번째 컴퓨터를 파일 이름을 전달하는 소켓에서 읽기를 기다리지 만합니다. 새 파일이있을 때

while : 
do 
    file=$(netcat -l 2000) 
    echo New file available $file 
done 

그리고 서버를, 또는 최초의 컴퓨터는 이런 짓을 했을까 : 그래서 두 번째 컴퓨터가 할 것 1024에서 포트가 특별한 필요하기 때문에 포트 = 2000을 선택

echo filename | netcat <ip address of second computer> 2000 

권한이 있지만 원하는 포트를 선택할 수 있습니다.

포트/소켓을 통한 대기가 차단되어 있으며 많은 CPU를 사용하지 않습니다.

+0

불행히도 그것은 리눅스가 아니라 윈도우입니다. 그럼에도 불구하고 두 번째 ansatz는 감사합니다. 나는 포트 리스닝이 어떻게 작동하는지 알지 못하지만 적어도 루프가 없다는 것을 알고있다. – Daniel