기본 콘텐츠로 건너뛰기

(VB.NET) Socket communication 입문

http://vb.net-informations.com/communications/vb.net_chat_server.htm

사내에서 쓰는 장비가 직렬통신이 안되는게 있고, Active X로 동작하는 친구들이 있길래 요새 트렌드인 64비트 환경에서는 먹통인게 너무 많더라고요..
그래서 개선된 프로그램 제작해서 배포하려고 찾아보니 VB.NET이라는 언어로 이더넷 / 직렬통신이 가능하네요~ 역시 마소구글형님들은 대단한거 같아요~~

dll을 로드해서 구현하던 VBA 방식을 베껴 쓰다가 python과 같이 단순히 Import System.Net.Sockets를 사용하는 걸 보고 정말 놀랐네요;;; 지금까지 전 뭘한걸까요~~

여튼 장비랑 통신을 해야해서 자료를 찾다보니 위의 예제로 실행하면 가능할 것 같습니다.
위의 예제에는 송수신 버퍼사이즈가 10024로 되어있는데, 실행하면 소켓의 송수신 버퍼사이즈가 65536으로 나와서 에러가 뜨더라고요~ 그래서 바이트 버퍼 배열의 사이즈를 아래와 같이 소켓 버퍼 사이즈로 바꾸니까 되더라고요~ 이유는 모르겠습니다.. 공부를 더 해봐야겠네요.. 역시 근본없는 넘이라 제약이 많네요~ ㅋㅋ 왠지 버퍼사이즈를 줄여서 보내야 할 거 같은데요~ 해결해봐야겠네요!

(For test server side)
              Dim bytesFrom(clientSocket.ReceiveBufferSizeAs Byte

(For test client side)
             Dim inStream(clientSocket.ReceiveBufferSizeAs Byte

Test server/client files above (written in SharpDevelop 4.4)
https://drive.google.com/open?id=1KUANExxlHFmoZU6ZF6az4MsBlwHCX-41


아래 레퍼런스는 키사이트에서 이더넷 샘플 프로그램을 VBA로 만들어놨네요~ 에디터로 비교해보시면 닷넷이 얼마나 단순한지 깨달을 수 있더라고요~ ..

VBA sample program made by keysight (External reference)
https://www.keysight.com/main/editorial.jspx?cc=DE&lc=ger&ckey=1000001131:epsg:sud&nid=-11143.0.00&id=1000001131:epsg:sud

-----이하는 추억팔이입니다-----
5인용 빙고 동작

5인용 빙고 승리자 발생시

------
8년 전에 학기 과제로 C++로 소켓통신을 해야하는 게(주제는 5인용 빙고를 했었네요~ ㅎㅎ) 있어서 한 학기 내내 못해서 과제실패보고서를 썼던 순간이 기억나네요..
과제실패보고서를 쓰다가 하도 안되니 빡쳐서 방에서 미친듯이 소주나 퍼먹다가 밤 11시쯤에 갑자기 방법이 이해가 되어서 같은 조 친구한테 과제실패보고서 쓰지 말라고 하고 급하게 만들어서 발표했었는데요~ ㅎㅎ 그 때 마지막에 도와줬던 친구가 아직도 기억이 나네요. 발표할 때도 고맙다고 했는데 말이에요.
server-side에서 계속 loop를 돌려야하는데 main()에 반복문 없이 넣어놓고 왜 계속 꺼지지????? ㅋㅋ 했었는데요.. 지금 생각하니까 참 황당하지만 그 땐 전부 생소한 개념이었으니까.. 하고 자기방어를 해봅니다~ ㅋㅋ 또, 그때는 이걸 도대체 왜 배우는지 이해를 못했는데요.. 진로도 광전자엔지니어로 생각했으니까.. 다시 프로그래밍을 보겠나 했었는데 말이죠, 오늘 협력사 분들이랑 미팅할 때 CAN통신/LIN통신/MCU제어 등등 관련 주제로 이야기하다보니 어떻게든 쓰게 되는구나~ 라고 그 때 더 열심히 할 걸 생각이 든 하루였습니다~ ㅎ.ㅎ.. 학교 다닐 때는 전자장 해석 같은게 좋아서 딱딱한 문법 위주인 프로그래밍이 너무 힘들었는데.. 요샌 너무 재미있는거 같아요! ㅎㅎ

댓글

이 블로그의 인기 게시물

(VBA) 009 - 닫힌 파일에서 데이터 읽어오기 (ExecuteExcel4Macro)

#毎日育ちゃん可愛い大会 예시의 매크로 파일을 테스트 할 때는 저장된 폴더를 사용하실 폴더로 꼭 바꿔주세요! (pptx파일) pptx파일 (xlsx파일) 예제데이터파일   Macro파일 ★ 진행목적 : 왜 이걸 사용합니까 . 1) 행이나 열 , 또는 Sheet 과 같이 다른 특성을 가지는 1,2,3 차 데이터배열에 대한 처리 방법을 지금까지 설명드렸습니다 . 2) 그럼 이제 , 다른 파일에서 데이터를 읽어올 방법을 알아볼 필요가 있습니다 . 어째선가 회사의 데이터를 처리하다보면 , 주기적인 이름의 엑셀 파일 특정 Sheet, Cell 에 있는 경우가 많았습니다 . 3) 엑셀에서 이미 열려있는 파일의 참조는 ‘=‘ 을 사용하면 가능하지만 , 닫힌 파일은 데이터를 읽지 못합니다 . 4) 그래서 이를 처리하기 위해 VBA 의 ‘ExecuteExcel4Macro( 주소 )’ 를 사용합니다 ! ★ 다른 파일의 참조는 어떻게 합니까 ? 1) 열려 있는 다른 파일의 데이터를 읽는 방식은 ‘=‘ 을 입력하고 해당 Cell 을 클릭하면 됩니다 ! 2) 그러면 아래와 같이 (=‘ 파일이 있는 폴더 [ 파일명 ]Sheet 명 ’!Cell 주소 ) 의 형태로 기록 이 됩니다 . ★ 닫힌 파일에 대해서는 INDIRECT 는 사용이 되질 않습니다 ! 1) INDIRECT 로는 처리가 되질 않습니다 . 2) 어째선가 전에 사용하던 INDIRECT 를 사용하고 싶지만 , 사용이 되질 않습니다 . 검색을 해봐도 안된다는 답변만 있네요 ! 3) 파일이 하나 두 개라면 , 이전과 같이 ‘=‘ 를 쓰면 되겠지만 , 그러면 자동화를 통한 효율화가 불가능해지겠죠 ! 4) 그래서 이를 처리하기 위해 VBA 의 ‘ExecuteExcel4Macro( 주소 )’ 를 사용합니다 ! ★ ExecuteExcel4Macro 는 어떻게 사용합니까 ? 1) VBA 의 ExecuteExcel4Macro 란 매크로...

[Python] 크롤링 HTTP Forbidden 403 문제 해결

  코드에는 문제가 없는데 HTTP 403 Forbidden이 발생하길래.. 검색해보니까 서버사이드에서 저 같은 불법 크롤러를 거르는 메쏘드가 있는 모양입니다. 아래의 링크를 참고해서 해결했습니다 https://howtoworld.tistory.com/52 urllib에서 Request를 import 해줘야합니다. 1 2 3 4 def  hellenicshipping():     url  =  Request( "https://www.hellenicshippingnews.com/category/shipping-news/dry-bulk-market" ,headers = { 'User-Agent' :  'Mozilla/5.0' })     html  =  urlopen(url)     savefile  =   './hsn.txt' Colored by Color Scripter cs

(Node.js) EUC-KR을 Cheerio - Iconv-lite로 불러올 때

처음으로 Node.js로 웹 데이터 수집을 해봤는데, 글자가 자꾸 깨져서 수십번의 실패 끝에 되는 방법을 찾았습니다. 웹에는 iconv와 iconv-lite 두 가지 방법이 나오는데, iconv는 무슨 문제에선가 설치가 잘 안됩니다. 그래서 iconv-lite를 이용해서 진행했는데 이 경우에는 아래 순서로 코드가 진행될 것입니다. Request >> Cheerio >> iconv-lite 여기서 Cheerio와 iconv-lite 모듈 사용 위치가 중요한데, 만약 잘못되었다면 '占쏙옙'또는 '�'을 만나게 됩니다. 웹에서 검색해보면 인코딩이 잘못됐으니 로드된 데이터를 iconv-lite로 바꾸라고 하는데, 모듈 사용이 적절하게 되지 않고 데이터를 읽어들이면 이미 깨진 데이터를 저장하기 때문에 역으로 디코딩 자체도 당연히 제대로 안됩니다. 그래서 여기저기서 주워온 지식들을 합쳐보니까 아래와 같이 하면 해결이 됐습니다 ㅎ.ㅎ 오늘도 웹에 계신 수많은 선생님들 감사합니당!!! <방법> 1. request 옵션에서 인코딩은 Null로 설정 2. 아래와 같이 Cheerio에서 불러들일 때 iconv-lite의 iconv.decode(Target 변수, 'EUC-KR') 3. 마지막으로 데이터 출력할 때는 별도의 모듈을 사용하지 않고 .text()로 읽어들인다.