"분류 전체보기"에 해당되는 글 - 371건
- 2018.10.08 크롬 확장프로그램 추천
- 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 이란
- 2018.09.30 visual studio 2017 빈 프로젝트 만들기
- 2018.09.28 C4996 에러
- 2018.09.28 LNK2019: __imp__closesocket@4 외부 기호(참조 위치: _main 함수)에서 확인하지 못했습니다.
Post
크롬 확장프로그램 추천
RescueTime : 시간관리 프로그램
DarkReader : 브라우저 화면색 어둡게 해주는 프로그램
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'를 통해 볼 수 있습니다.
라고 뜬다.
'이전게시판 > 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 |
Post
새프로젝트 생성 시 Visual C++ - Window 데스크톱 - Windows 데스크톱 마법사를 선택해야
빈 프로젝트를 생성할 수 있다.(콘솔, 응용 선택창은 그 다음에 나온다)
'이전게시판 > etc' 카테고리의 다른 글
puppeteer 실행안됨 (0) | 2022.12.18 |
---|---|
2019년 정보처리기사 실기 2회 후기 (0) | 2019.06.29 |
HTML 문법 기초 및 Git 호스팅 예제 (0) | 2018.10.06 |
window svnlook 은 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치파일.. 에러가 뜬다면.. (0) | 2018.10.02 |
Jenkins svn, msbuild 설정 (0) | 2018.09.13 |
Jenkins MSBuild 오류 해결방법 (0) | 2018.09.13 |
Unable to access the repository Jenkins (0) | 2018.09.12 |
VirtualBox 호스트 게스트 연결 (0) | 2018.08.29 |
Post
예전 서버 소스코드를 실행시키려고 하니 C4996에러가 났다.
C4996
'WSASocketA': Use WSASocketW() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings
C4996 'inet_addr': Use inet_pton() or InetPton() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings
OverlappedSend_Win_Wori
처음 C4996은 WSASocket 대신 WSASocketW 함수를 사용하라고 해서, 사용하니 해결.
두번째 c4996 Wanring은 inet_pton() or InetPton() 함수를 사용하라고 해서 수정하니 해결
#include <WS2tcpip.h> // inet_pton 함수 사용시 include 해야함
inet_pton(AF_INET, "127.0.0.1", &(sendAdr.sin_addr));
'이전게시판 > Server' 카테고리의 다른 글
IOCP window 채팅 클라이언트 소스 (0) | 2018.10.04 |
---|---|
IOCP 채팅 서버 소스 예제 (0) | 2018.10.04 |
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
LNK2019: __imp__closesocket@4 외부 기호(참조 위치: _main 함수)에서 확인하지 못했습니다.
[ 이전게시판/Server ] 2018. 9. 28. 14:171>main.obj : error LNK2019: __imp__closesocket@4 외부 기호(참조 위치: _main 함수)에서 확인하지 못했습니다.
1>main.obj : error LNK2019: __imp__connect@12 외부 기호(참조 위치: _main 함수)에서 확인하지 못했습니다.
1>main.obj : error LNK2019: __imp__htons@4 외부 기호(참조 위치: _main 함수)에서 확인하지 못했습니다.
1>main.obj : error LNK2019: __imp__inet_addr@4 외부 기호(참조 위치: _main 함수)에서 확인하지 못했습니다.
1>main.obj : error LNK2019: __imp__WSAStartup@8 외부 기호(참조 위치: _main 함수)에서 확인하지 못했습니다.
1>main.obj : error LNK2019: __imp__WSACleanup@0 외부 기호(참조 위치: _main 함수)에서 확인하지 못했습니다.
1>main.obj : error LNK2019: __imp__WSAGetLastError@0 외부 기호(참조 위치: _main 함수)에서 확인하지 못했습니다.
1>main.obj : error LNK2019: __imp__WSACloseEvent@4 외부 기호(참조 위치: _main 함수)에서 확인하지 못했습니다.
1>main.obj : error LNK2019: __imp__WSACreateEvent@0 외부 기호(참조 위치: _main 함수)에서 확인하지 못했습니다.
1>main.obj : error LNK2019: __imp__WSAGetOverlappedResult@20 외부 기호(참조 위치: _main 함수)에서 확인하지 못했습니다.
1>main.obj : error LNK2019: __imp__WSASend@28 외부 기호(참조 위치: _main 함수)에서 확인하지 못했습니다.
1>main.obj : error LNK2019: __imp__WSASocketA@24 외부 기호(참조 위치: _main 함수)에서 확인하지 못했습니다.
1>main.obj : error LNK2019: __imp__WSAWaitForMultipleEvents@20 외부 기호(참조 위치: _main 함수)에서 확인하지 못했습니다.
#pragma comment(lib, "ws2_32.lib")
lib 포함시켜주면 된다.
'이전게시판 > Server' 카테고리의 다른 글
IOCP window 채팅 클라이언트 소스 (0) | 2018.10.04 |
---|---|
IOCP 채팅 서버 소스 예제 (0) | 2018.10.04 |
C4996 에러 (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 |