"이전게시판"에 해당되는 글 - 162건
- 2018.10.13 Git Cui Commit
- 2018.10.12 Git Branch
- 2018.10.12 invalid username or password Sourcetree 해결
- 2018.10.12 GIT 사용 방법 정리
- 2018.10.06 Bitnabi로 서버 접속, 댓글 달기, 채팅기능 추가
- 2018.10.06 HTML 문법 기초 및 Git 호스팅 예제
- 2018.10.04 IOCP window 채팅 클라이언트 소스
- 2018.10.04 IOCP 채팅 서버 소스 예제
- 2018.10.02 window svnlook 은 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치파일.. 에러가 뜬다면..
- 2018.09.30 c++ 전처리기 region 이란
Post
Git Cui Commit
Git을 사용할 폴더 만들기
Git이 관리할 파일로 등록
버전만들기(commit)
git stage area
'이전게시판 > Git' 카테고리의 다른 글
Git Branch (0) | 2018.10.12 |
---|---|
invalid username or password Sourcetree 해결 (0) | 2018.10.12 |
GIT 사용 방법 정리 (0) | 2018.10.12 |
Git 기초_1 Clone, Commit, Push (with.TortoriseGit) (0) | 2016.07.13 |
Post
Git Branch 사용법
원격저장소(Remote)
인터넷, 네트워크에 연결되어있는 저장소. 로컬 저장소와 원격저장소를 연결해서 소스코드를 백업할 수 있다.
원격저장소로 소스코드 올리기(Push)
Push를 누르면 로컬에 있는 파일이 올라간다.
원격저장소로 업로드
수정사항을 Commit 하면 Push에 1이 뜬다.
저장소 복제(Clone)
원격 저장소에 내용을 자신의 local로 가져오는 것.
협업 pull,push
Stash
완성하지 못한 내용을 안전한 곳으로 이동시키는 것.
Tag
gitgnore
버전관리에서 파일을 무시한다.
'이전게시판 > Git' 카테고리의 다른 글
Git Cui Commit (0) | 2018.10.13 |
---|---|
invalid username or password Sourcetree 해결 (0) | 2018.10.12 |
GIT 사용 방법 정리 (0) | 2018.10.12 |
Git 기초_1 Clone, Commit, Push (with.TortoriseGit) (0) | 2016.07.13 |
Post
invalid username or password Sourcetree 해결
상황
로컬저장소와 원격저장소 동기화를 위해 Push 선택.
아이디, 비밀번호 입력 후 틀렸는지 실패해서 다시한번 시도하려고 했는데
아이디, 비밀번호 입력창이 뜨지 않아 계속
invalid username or password 에러 발생
해결
Sourcetree 인증정보를 삭제해야한다.
Updates were rejected because the tip of your current branch is behind 해결
상황
local 에서 작업한 내용을 원격저장소에 올리려고 Push 하니 아래와 같은 에러 발생.
해결
아마 새로 생성한 Repository에 Readme.md 파일이 있을 것이다.
'이전게시판 > Git' 카테고리의 다른 글
Git Cui Commit (0) | 2018.10.13 |
---|---|
Git Branch (0) | 2018.10.12 |
GIT 사용 방법 정리 (0) | 2018.10.12 |
Git 기초_1 Clone, Commit, Push (with.TortoriseGit) (0) | 2016.07.13 |
Post
GIT 사용 방법 정리
Git , Sourcetree 다운로드
Commit
파일추가 및 커밋을 하려면 해당 git 폴더에서 파일 생성한다.
Discard
working copy에 수정된 것을 원래대로 돌리고 싶을 때 선택.
Reset
이미 커밋한 것을 되돌린다.
Revert
Reset과 비슷하지만 다르다.
Branch
Branch는 미래에 넣을 수도 있고, 언제 들어갈지 모르는 새로운 작업을 할 수 있도록
Merge
2개의 Branch를 병합하는 것을 말한다.
- Master Branch 선택
- 병합하려는 Branch를 오른쪽 클릭하면 'Merge Branch into current branch' 메뉴가 있다. 클릭한다.
- Merge branch 'branchName' Graph가 생겼다.
충돌
Marster, Branch 의 소스코드의 같은 위치에 변경사항이 있다면 충돌이 일어난다.
충돌 예방
만약 장시간동안 Branch 작업을 한다고 했을 때 그 기간동안, Master 소스를 가져와서 동기화를 해야한다.
'이전게시판 > Git' 카테고리의 다른 글
Git Cui Commit (0) | 2018.10.13 |
---|---|
Git Branch (0) | 2018.10.12 |
invalid username or password Sourcetree 해결 (0) | 2018.10.12 |
Git 기초_1 Clone, Commit, Push (with.TortoriseGit) (0) | 2016.07.13 |
Post
Bitnami로 서버 접속 ( Windows )
- 아파치를 설치하기 위해 Bitnami( https://bitnami.com/ )를 다운받는다. MySql, PHP는 사용X
- 설치 확인을 위해 Go to Aplication 버튼을 클릭한다. Bitnabi 웹페이지가 잘 나온다면 성공한 것이다.
- Manage Servers 메뉴를 선택해 Apache Web Server를 Stop 시키면 Apache 서버가 꺼진 것이다.(웹페이지를 다시불러오면 페이지를 찾지 못했다는 창이 뜬다)D F
- Bitnami가 설치된 폴더로 가면( C:\Bitnami\wampstack-7.1.21-0\apache2\htdocs ) index.html 파일을 찾을 수 있다.
- index.html이 있는 폴더 내용을 전부 삭제 하고, 자신이 만든 html 파일을 넣으면 새로 고침 후 홈페이지가 반영된 것을 알 수 있다.
- 기존엔 내 컴퓨터에 html 파일을 연거지만, 5번은 웹 클라이언트가 웹 서버에 페이지를 요청을 하고, 클라이언트가 응답을 받아서 웹페이지가 나온 것이다.
댓글 달기 기능
- https://disqus.com/ 사이트 접속
- 회원가입, 로그인 후 나오는 페이지에서 Get Started - I want to install Disqus on my site 클릭
- Website Name을 적고 Create Site 클릭. 그 후 무엇으로 홈페이지를 만들었는지 선택하는 화면이 나오는데 맨 밑에 'I don't see my platform...' 클릭
- 어떤 코드가 나옴. 그 코드를 소스코드에 넣으면 댓글 추가 완료. ( File이 아니라 웹서버에 요청해서 페이지를 열어야 한다! 파일로는 댓글이 안보인다. )
채팅 기능 추가
- https://www.tawk.to/ 사이트 접속
- 가입, 로그인 후 Dashboard 화면이 뜬다. ( https://dashboard.tawk.to/#/dashboard )
- 여기서 왼쪽 맨 아래에 수레바퀴 모양(설정 모양) 버튼을 클릭한다.
- 자신의 홈페이지 이름, 주소를 적고 완료.
- Widget Code를 복사해서 웹 사이트에 추가한다. 채팅창이 추가된 것을 확인할 수 있다.(http로 열어야 한다. 파일x)
- 방문자가 채팅을 치면 알람소리가 들리고 Dashboard에서 알람이 뜬 것을 확인할 수 있다. 알람 뜬 아이콘을 선택 후 Join을 누르면 사용자와 채팅을 할 수 있다.
'이전게시판 > HTML CSS Javascript' 카테고리의 다른 글
크롤링 하려고 하는데 ModuleNotFoundError: No module named 'pandas'에서 막힘 (1) | 2022.10.11 |
---|---|
Javascript 정리 (0) | 2018.10.14 |
Post
HTML 기본태그
- <strong>내용</strong> : 중요한 단어라고 설정하고, 글자를 진하게 한다. <b>는 그냥 글자만 진하게 한다.
- <u>내용</u> : 밑줄 영어로 underline. 앞글자만 따서 <u> 태그는 글자에 밑줄을 긋는 태그이다.
- <h1> ~ <h6> : 제목을 나타내는 태그. 1이 제일 글자 크기가 크고 6이 제일 작다.
- <br> : 줄바꿈 태그. 닫는 태그가 없다.
- <p>내용</p> : 단락을 가르는 태그. 웹페이지에서 단락이라는 의미를 가지기 때문에 <br>태그와 비슷하지만 <p> 태그를 쓰면 더 좋다.그리고 <p>태그는 정해진 여백크기가 있지만 style을 사용하면 여백 크기를 다르게 만들 수 있다.
- <img>태그 : 이미지를 나타내는 태그. 사용 방법은 <img src = "이미지 위치" width = "100"> 이 때 src, width은 속성이다.
- <li>목록</li> 태그 : 목록 태그. 목록의 영어이름 list에 앞 두글자를 땄다. <ul>태그는 <li>태그로 이루어진 목록을
- <ul>태그는 Unordered List의 약자
- <ol>태그는 OrderedList 의 약자
- <title>타이틀</title> : 웹페이지의 제목을 명시적으로 알려줌. 검색엔진이 검색할 때 유용하게 사용된다.
- <a> : 링크. ancher 약자. <a href = 주소></a>
GIT으로 정적 웹 호스팅하기
- 로그인 후 새로운 저장소를 만든 후 Upload files 버튼을 클릭해서 웹파일을 git에 올린다.
- Settings 클릭 후 GitHub Pages 에서 source 를 master branch로 바꾼 후 저장.
- Source 위에 웹 주소가 생긴다. git에서 정적웹 호스팅이 생성된 것이다.
'이전게시판 > etc' 카테고리의 다른 글
VSCODE 글자색 변경 (0) | 2023.02.20 |
---|---|
요즈맞꾸 새벽에 자서 오후에 일어나네 (0) | 2022.12.29 |
puppeteer 실행안됨 (0) | 2022.12.18 |
2019년 정보처리기사 실기 2회 후기 (0) | 2019.06.29 |
window svnlook 은 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치파일.. 에러가 뜬다면.. (0) | 2018.10.02 |
visual studio 2017 빈 프로젝트 만들기 (0) | 2018.09.30 |
Jenkins svn, msbuild 설정 (0) | 2018.09.13 |
Jenkins MSBuild 오류 해결방법 (0) | 2018.09.13 |
Post
2018/10/04 - [Programing/Server] - IOCP window 채팅 클라이언트 소스
IOCP window 채팅 클라이언트 소스
아래는 IOCP window 채팅 클라이언트 프로젝트이다
#include#include #include #include #include #include #include #include #include "resource.h" #include #pragma comment(lib, "ws2_32.lib") struct SOCKDATA { SOCKET hSocket; SOCKADDR_IN servAdr; }; SOCKET hSocket = 0; // 소켓. 메시지 처리에서도 사용해야되서 전역변수로 선언 HWND hMsgWnd = 0; // 메시지 받고 나서 ui처리해야 되서 전역변수로 선언 #pragma region RegionName #define BUF_SIZE 1024 void ErrorHandling(const char* message); void StartServerConnect(WSADATA& wsaData, SOCKET& hSocket, SOCKADDR_IN& servAdr); // 소켓 초기화 DWORD WINAPI ServerThreadMain(LPVOID socket); // 서버와 데이터를 주고 받는 Thread BOOL Dlg_OnInitDialog(HWND hWnd, HWND hWndFocus, LPARAM lParam) { // WM_INITDIALOG: Dialog Box 초기화 코드 작성 return (TRUE); } void Dlg_OnCommand(HWND hWnd, int id, HWND hWndCtl, UINT codeNotify) { if (0 == hMsgWnd) { hMsgWnd = hWnd; } //WM_COMMAND switch (id) { case IDOK: { TCHAR buff[BUF_SIZE]; GetDlgItemText(hWnd, IDC_CHAT_ENTER, buff, BUF_SIZE); char temp[BUF_SIZE]; WideCharToMultiByte(CP_ACP, 0, buff, BUF_SIZE, temp, BUF_SIZE, NULL, NULL); printf("%s \n", temp); int len = strlen(temp); send(hSocket, temp, len, 0); memset(buff, 0, BUF_SIZE); // 글자 없애기 SetDlgItemText(hWnd, IDC_CHAT_ENTER, buff); break; } case WM_DESTROY: exit(0); break; } } // DialogBox Procedure INT_PTR WINAPI Dlg_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: return (SetDlgMsgResult(hWnd, uMsg, HANDLE_WM_INITDIALOG((hWnd), (wParam), (lParam), (Dlg_OnInitDialog)))); case WM_COMMAND: return (SetDlgMsgResult(hWnd, uMsg, HANDLE_WM_COMMAND((hWnd), (wParam), (lParam), (Dlg_OnCommand)))); } return (FALSE); } int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { WSADATA wsaData; SOCKADDR_IN servAdr; StartServerConnect(wsaData, hSocket, servAdr); UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); // DialogBox생성 함수 DialogBox(hInstance, MAKEINTRESOURCE(CHAT_DIALOG/*DialogBox ID*/), NULL, Dlg_Proc/*DialogBox Procedure*/); return(0); } DWORD WINAPI ServerThreadMain(LPVOID data) { SOCKDATA* socketInfo = (SOCKDATA*)data; if (NULL == socketInfo) { return 0; } if (connect(socketInfo->hSocket, (SOCKADDR*)(&socketInfo->servAdr), sizeof(socketInfo->servAdr)) == SOCKET_ERROR) { DWORD dwError = GetLastError(); ErrorHandling("connect() error!"); } else puts("Connected..........."); char message[BUF_SIZE]; memset(message, 0, BUF_SIZE); TCHAR uniMessage[BUF_SIZE]; memset(uniMessage, 0, BUF_SIZE * sizeof(TCHAR)); int strLen = 0; int readLen = 0; while (true) { //fputs("Input message(Q to quit): ", stdout); //fgets(message, BUF_SIZE, stdin); //if (!strcmp(message, "q\n") || !strcmp(message, "Q\n")) // break; //strLen = strlen(message); //send(socketInfo->hSocket, message, strLen, 0); readLen = 0; while (1) { memset(message, 0, BUF_SIZE); readLen += recv(socketInfo->hSocket, &message[readLen], BUF_SIZE - 1, 0); if (readLen >= strLen) break; } strLen = readLen; message[strLen] = 0; // 유니코드로 변경 memset(uniMessage, 0, BUF_SIZE * sizeof(TCHAR)); // 유니코드 변경 전 유니코드 길이 구하기 int nUniLen = MultiByteToWideChar(CP_ACP, 0, message, strlen(message), NULL, NULL); MultiByteToWideChar(CP_ACP, 0, message, strLen+1, uniMessage, nUniLen); if (0 != hMsgWnd) { //SetDlgItemText(hMsgWnd, CHAT_VIEW, uniMessage); SendDlgItemMessage(hMsgWnd, CHAT_VIEW, LB_GETCURSEL, 0, 0); SendDlgItemMessage(hMsgWnd, CHAT_VIEW, LB_ADDSTRING, 0, (LPARAM)uniMessage); } strLen = 0; //printf("Message from server: %s", message); } delete socketInfo; closesocket(socketInfo->hSocket); WSACleanup(); return 0; } void StartServerConnect(WSADATA& wsaData, SOCKET& hSocket, SOCKADDR_IN& servAdr) { if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) ErrorHandling("WSAStartup() error!"); hSocket = socket(PF_INET, SOCK_STREAM, 0); if (hSocket == INVALID_SOCKET) ErrorHandling("socket() error"); memset(&servAdr, 0, sizeof(servAdr)); servAdr.sin_family = AF_INET; inet_pton(AF_INET, "127.0.0.1", &(servAdr.sin_addr)); servAdr.sin_port = htons(atoi("7777")); SOCKDATA* sockData = new SOCKDATA(); sockData->hSocket = hSocket; sockData->servAdr = servAdr; // 서버와 통신할 thread 생성 _beginthreadex(NULL, 0, (_beginthreadex_proc_type)ServerThreadMain, (LPVOID)sockData, 0, NULL); } void ErrorHandling(const char *message) { fputs(message, stderr); fputc('\n', stderr); exit(1); } #pragma endregion
Dialog ID : CHAT_DIALOG
채팅 ListView ID : CHAT_VIEW (Sort 하지말것)
채팅 메시지 입력 Edit ID : IDC_CHAT_ENTER
확인 버튼 ID : IDOK
이전에 올린 IOCP 채팅 서버와 대응하는 클라이언트다
'이전게시판 > Server' 카테고리의 다른 글
IOCP 채팅 서버 소스 예제 (0) | 2018.10.04 |
---|---|
C4996 에러 (0) | 2018.09.28 |
LNK2019: __imp__closesocket@4 외부 기호(참조 위치: _main 함수)에서 확인하지 못했습니다. (0) | 2018.09.28 |
구글 프로토콜 버퍼 C++ Window 예제 (Google Protocol buffer) (0) | 2018.07.27 |
기본 서버 예제의 문제점 (0) | 2018.07.05 |
C4996 inet_addr Error Solution (0) | 2018.06.30 |
ip주소 추적 (0) | 2018.04.21 |
hosts파일, DNS (0) | 2018.04.21 |
Post
IOCP 채팅 서버 소스 예제
윤성우의 TCP/IP 에코 채팅 서버에서
다른사람들에게 채팅 내용이 전송되도록 수정한 소스이다.
#include#include #include #include #include #include #include #pragma comment(lib, "ws2_32.lib") #define BUF_SIZE 100 #define READ 3 #define WRITE 5 int const NAME_SIZE = 10; typedef struct // socket intfo { SOCKET hClntSock; SOCKADDR_IN clntAdr; }PER_HANDLE_DATA, *LPPER_HANDLE_DATA; typedef struct // buffer info { OVERLAPPED overlapped; WSABUF wsaBuf; char buffer[BUF_SIZE]; int rwMode; // READ or WRITE }PER_IO_DATA, *LPPER_IO_DATA; typedef struct { char id[NAME_SIZE]; unsigned int level; }USER_INFO, *PUSER_INFO; // 나중에 PER_HANDLE_DATA 상속하자 std::list
UserList; // 다른사람에게 채팅 전달해야하므로 user list 추가 DWORD WINAPI EchoThreadMain(LPVOID CompletionPortIO); CRITICAL_SECTION cs; // UserList 동기화를 위한 Critical Section int main() { WSADATA wsaData; HANDLE hComPort; SYSTEM_INFO sysInfo; LPPER_IO_DATA ioInfo; LPPER_HANDLE_DATA handleInfo; SOCKET hServSock; SOCKADDR_IN servAdr; int recvBytes, i, flags = 0; if (0 != WSAStartup(MAKEWORD(2, 2), &wsaData)) { printf("WSAStartup() error!"); exit(1); } hComPort = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0); GetSystemInfo(&sysInfo); for (i = 0; i < (int)sysInfo.dwNumberOfProcessors; ++i) { // Thread 핸들 정리 추가할 것 _beginthreadex(NULL, 0, (_beginthreadex_proc_type)EchoThreadMain, (LPVOID)hComPort, 0, NULL); } hServSock = WSASocketW(AF_INET, SOCK_STREAM, 0, NULL, 0, WSA_FLAG_OVERLAPPED); memset(&servAdr, 0, sizeof(servAdr)); servAdr.sin_family = AF_INET; inet_pton(AF_INET, "127.0.0.1", &(servAdr.sin_addr)); servAdr.sin_port = htons(atoi("7777")); bind(hServSock, (SOCKADDR*)&servAdr, sizeof(servAdr)); listen(hServSock, 5); InitializeCriticalSection(&cs); while (1) { SOCKET hClntSock; SOCKADDR_IN clntAdr; int addrLen = sizeof(clntAdr); hClntSock = accept(hServSock, (SOCKADDR*)&clntAdr, &addrLen); handleInfo = (LPPER_HANDLE_DATA)malloc(sizeof(PER_HANDLE_DATA)); // 누군가 접속할 때 마다 소켓 정보를 생성하고 handleInfo->hClntSock = hClntSock; // hClntSock은 지역변수이므로 저장한다 memcpy(&(handleInfo->clntAdr), &clntAdr, addrLen); EnterCriticalSection(&cs); UserList.push_back(handleInfo); LeaveCriticalSection(&cs); CreateIoCompletionPort((HANDLE)hClntSock, hComPort, (DWORD)handleInfo, 0); // 접속한 클라 소켓을 IOCP에 등록함 ioInfo = (LPPER_IO_DATA)malloc(sizeof(PER_IO_DATA)); // 신규 유저 접속 시 overlapped도 생성한다. memset(&(ioInfo->overlapped), 0, sizeof(OVERLAPPED)); // 그리고 WSARecv 함수로 소켓 io완료 시 반환되는 wasBuf, overlapped 주소를 등록한다 ioInfo->wsaBuf.len = BUF_SIZE; ioInfo->wsaBuf.buf = ioInfo->buffer; ioInfo->rwMode = READ; WSARecv(handleInfo->hClntSock, &(ioInfo->wsaBuf), 1, (LPDWORD)&recvBytes, (LPDWORD)&flags, &(ioInfo->overlapped), NULL); // recv가 완료되었을 때 GetQueue...에서 반환됨 } DeleteCriticalSection(&cs); return 0; } DWORD WINAPI EchoThreadMain(LPVOID pComPort) { HANDLE hComPort = (HANDLE)pComPort; SOCKET sock; DWORD bytesTrans; LPPER_HANDLE_DATA handleInfo; LPPER_IO_DATA ioInfo; DWORD flags = 0; char msg[BUF_SIZE]; while (1) { GetQueuedCompletionStatus(hComPort, &bytesTrans, (LPDWORD)&handleInfo, (LPOVERLAPPED*)&ioInfo, INFINITE); sock = handleInfo->hClntSock; if (READ == ioInfo->rwMode) { puts("message received!"); if (0 == bytesTrans) { EnterCriticalSection(&cs); std::list ::iterator iter; for (iter = UserList.begin(); iter != UserList.end(); ++iter) { if (sock == (*iter)->hClntSock) { UserList.erase(iter); break; } } LeaveCriticalSection(&cs); closesocket(sock); free(handleInfo); free(ioInfo); continue; } memset(msg, 0, BUF_SIZE); memcpy(msg, ioInfo->buffer, BUF_SIZE); free(ioInfo); EnterCriticalSection(&cs); // UserList는 여러 스레드가 접근하는 공유자원이므로 접근 시 cs 필수 std::list ::iterator iter; for (iter = UserList.begin(); iter != UserList.end(); ++iter) { // 소켓마다 overlapped를 새로 만들어야 한다. 왜냐하면 하나의 overlapped를 여러 소켓이 쓸 수 없기 때문이다. ioInfo = (LPPER_IO_DATA)malloc(sizeof(PER_IO_DATA)); memset(&(ioInfo->overlapped), 0, sizeof(OVERLAPPED)); ioInfo->wsaBuf.buf = msg; // msg는 스레드마다 가지고 있는 지역변수이므로 공유자원이 아니므로 cs 사용을 하지 않는다 ioInfo->wsaBuf.len = bytesTrans; ioInfo->rwMode = WRITE; WSASend((*iter)->hClntSock, &(ioInfo->wsaBuf), 1, NULL, 0, &(ioInfo->overlapped), NULL); } LeaveCriticalSection(&cs); ioInfo = (LPPER_IO_DATA)malloc(sizeof(PER_IO_DATA)); memset(&(ioInfo->overlapped), 0, sizeof(OVERLAPPED)); ioInfo->wsaBuf.len = BUF_SIZE; ioInfo->wsaBuf.buf = ioInfo->buffer; ioInfo->rwMode = READ; WSARecv(sock, &(ioInfo->wsaBuf), 1, NULL, &flags, &(ioInfo->overlapped), NULL); } else { puts("message sent!"); free(ioInfo); } } return 0; }
실행하면 아래처럼 여러사람들에게 메시지가 전송된다.
내가 개인적으로 저장할 용도로 올리는거라서 수정, 추가할 부분이 많다:Q...
( 메시지큐를 이용해서 데이터 받는 부분, 처리부분 분리하기, 패킷 덜 왔을 때 합치기, acceptEx , 메모리풀 등..)
'이전게시판 > Server' 카테고리의 다른 글
IOCP window 채팅 클라이언트 소스 (0) | 2018.10.04 |
---|---|
C4996 에러 (0) | 2018.09.28 |
LNK2019: __imp__closesocket@4 외부 기호(참조 위치: _main 함수)에서 확인하지 못했습니다. (0) | 2018.09.28 |
구글 프로토콜 버퍼 C++ Window 예제 (Google Protocol buffer) (0) | 2018.07.27 |
기본 서버 예제의 문제점 (0) | 2018.07.05 |
C4996 inet_addr Error Solution (0) | 2018.06.30 |
ip주소 추적 (0) | 2018.04.21 |
hosts파일, DNS (0) | 2018.04.21 |
Post
window에서 cmd 실행시켜서 svnlook 명령어를 쳤더니
svnlook 은 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치파일.. 에러가 뜬다면..,,,,
이런 에러가 뜬다.
확인한 것은 두가지다.
1. 환경변수 확인
제어판 - 시스템 - 고급 - 환경변수 - 시스템 변수
PATH 에 svn 프로그램 위치를 추가한다.
C:\Program Files\TortoiseSVN\bin;
tortoies svn 설치하면 보통 설정되어있었고 나도 설정되어 있었다.
2. Subversion 설치
나는 Subversion 이 설치가 되어있지 않았다.
아래 링크에서 윈도우버전 설치하고 cmd 재실행 후 svnloock을 치면
사용법은 'svnlook help'를 통해 볼 수 있습니다.
라고 뜬다.
http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=11151&expandFolder=11151&folderID=91
'이전게시판 > etc' 카테고리의 다른 글
요즈맞꾸 새벽에 자서 오후에 일어나네 (0) | 2022.12.29 |
---|---|
puppeteer 실행안됨 (0) | 2022.12.18 |
2019년 정보처리기사 실기 2회 후기 (0) | 2019.06.29 |
HTML 문법 기초 및 Git 호스팅 예제 (0) | 2018.10.06 |
visual studio 2017 빈 프로젝트 만들기 (0) | 2018.09.30 |
Jenkins svn, msbuild 설정 (0) | 2018.09.13 |
Jenkins MSBuild 오류 해결방법 (0) | 2018.09.13 |
Unable to access the repository Jenkins (0) | 2018.09.12 |
Post
사용법
#pragma region RegionName
source code ...
#pragma endregion
설명
#pragma region 선언부터 endregion 까지 하나의 소스로 인식한다.
하나의 소스로 인식되면 코드 옆에 - , + 아이콘으로 코드를 한번에 접을 수 있어서 유용하다.
'이전게시판 > C, C++' 카테고리의 다른 글
How to TCHAR to string C++ (GetCurrentDirectory) (0) | 2024.10.07 |
---|---|
c++ stl Map 동적할당 delete 해제 예제 (0) | 2024.10.04 |
Visual studio 단축키 (0) | 2024.10.03 |
C++ csv 파일 읽기 (0) | 2024.09.25 |
pragma message 출력창에 내용 출력 (0) | 2018.08.29 |
Cygwin 설치 설정 방법 (0) | 2018.07.27 |
서버 파싱 중 이진수 데이터 조합 (0) | 2018.06.20 |
flyweight(플라이웨이트) 패턴 (0) | 2018.06.16 |