2020년 4월 24일 금요일

UDP 통신에서 MULTICAST이용하기

MFC CAsyncSocket이용하기

CmyAsyncSocket m_UDP;

// 약속된 포트를 연다.  받기 위해서
m_UDP.Create(m_port,SOCK_DGRAM,FD_READ | FD_WRITE);  // SOCK_DGRAM : UDP통신

// 보내기
SOCKADDR_IN saddr;
memset(&saddr,0,sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_addr.s_addr = inet_addr( ipaddress );  // 보낼곳.
saddr.sin_port=htons(m_port);                       // 그 약속된 포트
m_UDP.SendTo(m_msg.GetBuffer(0), 1024, (SOCKADDR*)&saddr, sizeof(saddr));

// 받기
SOCKADDR_IN saddr;
int size=sizeof(saddr);
TCHAR tbuff[1024]={0,};
int nRead = m_UDP.ReceiveFrom(tbuff,1024,(SOCKADDR*)&saddr,&size);

// 다음은 MULTICAST ...
// 옵션을 추가한다... D ipaddress group으로 전송하고자 한다.
// 보내기 위해서  TTL  로 뚫고  IF를 local ip로 지정한다.
int ttl=2;
m_UDP.SetSockOpt(IP_MULTICAST_TTL, (char *)&ttl, sizeof(ttl), IPPROTO_IP) ;
char ipaddr[25]; // local address
WideCharToMultiByte(CP_ACP, 0, m_ip, -1, ipaddr, 25, NULL, NULL);
IN_ADDR localaddr;
localaddr.s_addr = inet_addr( ipaddr );
m_UDP.SetSockOpt(IP_MULTICAST_IF, (char *)&localaddr, sizeof(localaddr), IPPROTO_IP) ;

// 받기 위해서  D ip address group을 등록한다.
char ipaddress[25]={"224.0.0.123"};  //D group ip address 사용. 
struct ip_mreq mreq ;
memset(&mreq, 0, sizeof(mreq)) ;
mreq.imr_multiaddr.s_addr = inet_addr( ipaddress );
mreq.imr_interface.s_addr = htons(m_port); //htonl( INADDR_ANY );
mreq.imr_interface.s_addr = htonl( INADDR_ANY );
m_UDP.SetSockOpt(IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq), IPPROTO_IP) ;

// 옵션 지정후 보내기는 D group ip로 보내야 한다.
saddr.sin_addr.s_addr = inet_addr( "224.0.0.123" );  
m_UDP.SendTo(m_msg.GetBuffer(0), 1024, (SOCKADDR*)&saddr, sizeof(saddr));
// 그러면 Multicast 받기 그룹에 등록된 곳을 받는다.    

2020년 4월 8일 수요일

UNICODE에서 CString format 사용하기...


 filebuf.Format(_T("%s\\%s"), CString(AppPath), _T("APCDATA"));
  // UNICODE 뒷부분이 안보인다.
 BOOL ret = PathIsDirectory( filebuf );
 char str[1024]; sprintf(str, "%s\\%s", AppPath, "APCDATA" );
 // UICODE에서 Format에 char 있으면 안된다. 2020-04-08  ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
 if( GetFileAttributes( filebuf ) == 0xffffffff ){
  if ( ! ::CreateDirectory( filebuf, NULL ) )
   ::MessageBox((HWND)NULL,_T("./APCDATA 폴더 생성 실패."),NULL,MB_OK|MB_TOPMOST);
 }

2020년 4월 4일 토요일

CXIMAGE를 사용하면 BMP를 JPG로 저장할 수 있다.


#include "./cximage/cximage/ximage.h"
#pragma comment(lib,"./cximage/cximage/CxImageDLL/Debug/cximagecrtd.lib")
//#pragma comment(lib,"./cximage/cximage/Debug/cximage.lib")



CxImage* newImage = new CxImage();
newImage->Load(file_bmp, CXIMAGE_FORMAT_BMP);

BOOL bRet;
if (newImage->IsValid()){
newImage->Save(path,CXIMAGE_FORMAT_JPG);
}

delete newImage;
newImage = NULL;

2020년 3월 23일 월요일

인스턴스와 핸들

A라는 프로그램이 B 라는 프로그램의 C라는 서브 윈도우에 버튼을 누르는 효과나 커멘드 메시지를 날려 메뉴를 선택하는 행위하는 것을 구현하려면 ...


그때 필요한것은 B의 신스턴스요 그 인스턴스가 관장하는 그리고 액비브 된 C라는 윈도우의 핸들.

2020년 1월 18일 토요일

MSSQL express 사용

MS SQL Server Express 사용

  1. 2008 버젼을 사용했다.  express 버젼은 데이터 가져오기가 안될 수 있다는 메세지는 2014에서도 똑 같이 나타난다. 아마도 2014에서도 될듯.

  2. SQLEXPRWT_x64_KOR 를 사용했다.  SQLManagementStudio_x64_KOR가 포함되어 있다.

  3. 보안이 되어있으면 충돌이 일어나니 우선 지우자.

  4. 설치는 디폴트로 다하고 우선 윈도우즈 인증 모드로 들어간다.

  5. 데이터베이스에 MxxxFxxx을 생성한다.

  6. 사용자도 생성한다.  elexxxx   elexxxx
     사용자 옵션에 sysadmin을 추가하고, 생성 데이터베이스 기본으로 가져가고, owner처리하고 accessadmin도 해두자.

  7.  데이터 가져오기를 한다.   ms access는 보안으로 되어 있다면 열기에서 단독모드로 열기를 하고 암호를 제거한 상태로 저장해야한다.  그러면 데이터 가져오기를 할 수 잇다.

  8.  속성에서 윈도우즈 인증 모드와 로그인 복합 모드가 되게 한다.

  9.  SQL SERVER가  tcp/ip 가 되게 한다. 1433포트로 가능하게 한다.  외부에서 접속하기 위해서는 방화벽도 손봐야 한다.

2019년 12월 26일 목요일

시놀로지 파일서버에서 웹서버를 돌리기

chaejoo@LIFENTECH2:~$ pip -V
-sh: pip: command not found
chaejoo@LIFENTECH2:~$ sudo wget https://bootstrap.pypa.io/get-pip.py
chaejoo@LIFENTECH2:~$ sudo python3 get-pip.py
chaejoo@LIFENTECH2:~$ echo $PATH
/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/                                 local/bin
chaejoo@LIFENTECH2:~$ PATH=$PATH:/volume1/@appstore/py3k/usr/local/bin:
chaejoo@LIFENTECH2:~$ pip -V
pip 19.3.1 from /volume1/@appstore/py3k/usr/local/lib/python3.5/site-packages/pi                                 p (python 3.5)
chaejoo@LIFENTECH2:~$ sudo pip install django
Collecting django
  Downloading https://files.pythonhosted.org/packages/cb/c9/ef1e25bdd092749dae74                                 c95c2707dff892fde36e4053c4a2354b2303be10/Django-2.2.9-py3-none-any.whl (7.5MB)
     |████████████████████████████████| 7.5MB 5.5MB/s
Collecting sqlparse
  Downloading https://files.pythonhosted.org/packages/ef/53/900f7d2a54557c6a3788                                 6585a91336520e5539e3ae2423ff1102daf4f3a7/sqlparse-0.3.0-py2.py3-none-any.whl
Collecting pytz
  Downloading https://files.pythonhosted.org/packages/e7/f9/f0b53f88060247251bf4                                 81fa6ea62cd0d25bf1b11a87888e53ce5b7c8ad2/pytz-2019.3-py2.py3-none-any.whl (509kB                                 )
     |████████████████████████████████| 512kB 13.5MB/s
Installing collected packages: sqlparse, pytz, django
Successfully installed django-2.2.9 pytz-2019.3 sqlparse-0.3.0
chaejoo@LIFENTECH2:~$ cd
chaejoo@LIFENTECH2:~$ mkdir DjangoProject
chaejoo@LIFENTECH2:~$ cd DjangoProject/
chaejoo@LIFENTECH2:~/DjangoProject$ ls
chaejoo@LIFENTECH2:~/DjangoProject$ django-admin startproject djangotest1
chaejoo@LIFENTECH2:~/DjangoProject$ cd djangotest1/
chaejoo@LIFENTECH2:~/DjangoProject/djangotest1$ sudo python3 manage.py runserver                                 Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 17 unapplied migration(s). Your project may not work properly until you                                  apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

December 27, 2019 - 13:46:37
Django version 2.2.9, using settings 'djangotest1.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
^Cchaejoo@LIFENTECH2:~/DjangoProject/djangotest1$ sudo python3 manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying sessions.0001_initial... OK
Watching for file changes with StatReloaderst1$ sudo python3 manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).
December 27, 2019 - 13:48:02
Django version 2.2.9, using settings 'djangotest1.settings'
Starting development server at http://127.0.0.1:8000/
chaejoo@LIFENTECH2:~/DjangoProject/djangotest1$ sudo python3 manage.py runserver 192.168.0.139:8080
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
December 27, 2019 - 13:49:46
Django version 2.2.9, using settings 'djangotest1.settings'
Starting development server at http://192.168.0.139:8080/
Quit the server with CONTROL-C.
^Cchaejoo@LIFENTECH2:~/DjangoProject/djangotest1$
chaejoo@LIFENTECH2:~/DjangoProject/djangotest1$
chaejoo@LIFENTECH2:~/DjangoProject/djangotest1$
chaejoo@LIFENTECH2:~/DjangoProject/djangotest1$ ls
db.sqlite3  djangotest1  manage.py
chaejoo@LIFENTECH2:~/DjangoProject/djangotest1$ cd djangotest1/
chaejoo@LIFENTECH2:~/DjangoProject/djangotest1/djangotest1$ ls
__init__.py  __pycache__  settings.py  urls.py  wsgi.py
chaejoo@LIFENTECH2:~/DjangoProject/djangotest1/djangotest1$ sudo nano settings.py
sudo: nano: command not found
chaejoo@LIFENTECH2:~/DjangoProject/djangotest1/djangotest1$ sudo vi settings.py
chaejoo@LIFENTECH2:~/DjangoProject/djangotest1/djangotest1$ sudo python3 manage.py runserver 192.168.0.139:8080
python3: can't open file 'manage.py': [Errno 2] No such file or directory
chaejoo@LIFENTECH2:~/DjangoProject/djangotest1/djangotest1$ cd ..
chaejoo@LIFENTECH2:~/DjangoProject/djangotest1$ cd ..
chaejoo@LIFENTECH2:~/DjangoProject$ cd djangotest1/
chaejoo@LIFENTECH2:~/DjangoProject/djangotest1$ sudo python3 manage.py runserver 192.168.0.139:8080
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
December 27, 2019 - 13:53:31
Django version 2.2.9, using settings 'djangotest1.settings'
Starting development server at http://192.168.0.139:8080/
Quit the server with CONTROL-C.
[27/Dec/2019 13:53:44] "GET / HTTP/1.1" 200 16348
[27/Dec/2019 13:53:44] "GET /static/admin/css/fonts.css HTTP/1.1" 200 423
[27/Dec/2019 13:53:44] "GET /static/admin/fonts/Roboto-Light-webfont.woff HTTP/1.1" 200 85692
[27/Dec/2019 13:53:44] "GET /static/admin/fonts/Roboto-Bold-webfont.woff HTTP/1.1" 200 86184
[27/Dec/2019 13:53:44] "GET /static/admin/fonts/Roboto-Regular-webfont.woff HTTP/1.1" 200 85876
Not Found: /favicon.ico
[27/Dec/2019 13:53:45] "GET /favicon.ico HTTP/1.1" 404 1981
^Cchaejoo@LIFENTECH2:~/DjangoProject/djangotest1$ sudo wget https://bootstrap.pypa.io/get-pip.py
--2019-12-27 13:56:28--  https://bootstrap.pypa.io/get-pip.py
Resolving bootstrap.pypa.io... 151.101.228.175, 2a04:4e42:36::175
Connecting to bootstrap.pypa.io|151.101.228.175|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1775835 (1.7M) [text/x-python]
Saving to: 'get-pip.py'

get-pip.py                   100%[===========================================>]   1.69M  1.49MB/s    in 1.1s

2019-12-27 13:56:30 (1.49 MB/s) - 'get-pip.py' saved [1775835/1775835]

chaejoo@LIFENTECH2:~/DjangoProject/djangotest1$