일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- SDK
- 기초
- 파라미터
- c#
- 델파이
- vb
- Firebird
- dll
- 데이터베이스
- 파이어버드
- winsock
- 셋업
- MySQL
- VB.NET
- Delphi
- 예제
- SQL
- MFC
- 설치
- Visual Basic
- 인스톨
- 시리얼 통신
- 소니
- Visual Studio 2005
- 초보
- WIN32 SDK
- 문자열
- 입문
- PostgreSQL
- xml
- Today
- Total
목록winsock (10)
프로그래밍 노트
inet_addr()을 이용하여 "127.0.0.1"라는 문자열을 32비트의 바이너리 값으로 변환한다. inet_addr()는 IP 어드레스를 나타내는 문자열을 바이너리 값으로 변환하는 함수이다. 통신하기위해 상대방을 지정할 때는 "127.0.0.1"과 같은 IP 어드레스를 쳐넣지만 "localhost"와 같이 이름을 이용하여 통신할 상대방을 지정할 수도 있다. 이와 같이 호스트의 이름으에서 IP 어드레스로 변환해 주는 함수가 gethostbyname()이다. #include #include int main() { WSADATA wsaData; SOCKET sockClt; char szMsg[32]; char pszName[32]; struct sockaddr_in addrSockSvr; printf("..
정말 간단한 http 서버이다. 이런 것을 http 서버라 할 수 있을까정도로... 그래도 웹브라우저로 접속할 수 있으니까... #include #include int main() { WSADATA wsaData; SOCKET sockSvr; SOCKET sockSS; int nlen; struct sockaddr_in addrSockSvr; struct sockaddr_in addrSockclt; long nRet; BOOL bValid = 1; char szBuf[2048]; char szInBuf[2048]; // 윈속 초기화 if(WSAStartup(MAKEWORD(2, 0), &wsaData) != 0) { return 1; } // 소켓 만들기 sockSvr = socket(AF_INET, S..
TCP의 서버 프로그램을 종료한 바로뒤 다시 서버를 기동하면 bind에서 에러(Address aleady in use)로 끝날 때가 있다. TCP의 서버 프로그램을 종료하고 다시 기동시켰는데 왜 bind가 되지 않을까? 라고 생각하며 시간이 지난후 다시 기동시키면 문제업이 bind가 된다. 이 문제는 TCP 자체 사양에 의하여 일어나는 문제이다. 구체적으로는 TCP의 TIME_WAIT상태가 bind를 fail시킨다. 서버는 TCP 세션을 받은 상태에서 close하면 TIME_WAIT상태가 된다. 이때 주의해야되는 것은 TCP 서버의 TIME_WAIT가 발생하는 경우와 발생하지 않는 경우가 있다는 것이다. TCP서버 쪽에서 close를 먼저 실행하면 TIME_WAIT상태가 발생하지만 TCP클리아언트 쪽에서..
서버가 클라이언트의 접속을 기다리다가 클라이언트가 접속 되었을때 어느 클라이언트가 접속 했는지 알아야 할때가 있다. accept가 되어지면 accept함수의 두번째 파라미터에 상대방에 대한 정보가 저장되어진다. 예제는 accept한 상대방의 IP어드레스와 포트를 표시한다. (IP어드레스는 문제없이 가져오는데 포트를 제대로 못가져온다. -.-;;; ) (왜 이상한 포트 번호가 넘어오는지 모르겠다. -.-????? ) #include #include int main() { WSADATA wsaData; SOCKET sockSvr; SOCKET sockSS; int nlen; struct sockaddr_in addrSockSvr; struct sockaddr_in addrSockclt; // 윈속 초기화 W..
실제로 프로그램을 짤때에는 에러처리를 잘해야되는 것은 두말할 것도 없을 것같다. #include #include int main() { WSADATA wsaData; SOCKET sockSvr; SOCKET sockSS; int nlen; struct sockaddr_in addrSockSvr; struct sockaddr_in addrSockclt; long nRet; // 윈속 초기화 if(WSAStartup(MAKEWORD(2, 0), &wsaData) != 0) { return 1; } // 소켓 만들기 sockSvr = socket(AF_INET, SOCK_STREAM, 0); if(sockSvr == INVALID_SOCKET) { printf("Socket Error No : %d", WSA..
윈속을 써서TCP에 의한 통신을 해보자. ---------------------------------------------------------------------- TCP는 무엇일까? 인터넷으로 통신할 때 90% 이상은 TCP에 의해 통신하고 있다고 해도 과언은 아니다. 인터넷에서 통신을 행하는 프로그램을 짤때 거의다가 TCP에 의한 것일 것 같다. 인터넷은 신뢰성이 없는 통신망이다. 신뢰성이 없는 인터넷은 통신중에 패킷을 잃어버리거나 비트에러, 패킷의 순서가 바뀌는 등 여러가지 에러가 발생할 가능성이 있다. TCP는 그와 같은 통신경로의 장애를 커버해준다. 구체적으로는 패킷 로스가 발생하면 다시 보내주거나 패킷의 순서가 바뀌면 바른 순서로 고쳐준다. TCP에 의한 통신은 서버와 클라이언트의 양자같에..
소켓을 만들때나 통신중에 에러가 발생하는 경우가 있다. 이런 경우 에러에 대한 내용을 알아야될 필요가 있다. 윈속에서 그럴때 쓰는 것이 WSAGetLastError()이다. 이하는 WSAGetLastError()를 이용한 예제이다. 밑의 소스는 socket()이 에러를 돌려보내도록 첫번째 인수에 부정한 값을 넣었다. ====================================================================== #include #include #define AF_ERROR 777 int main() { WSADATA wsaData; SOCKET sock; WSAStartup(MAKEWORD(2, 0), &wsaData); sock = socket(AF_ERROR, SOCK_..
소켓이란 무엇인가? 소켓은 사용자에게 있어서 데이터의 출입구된다. 사용자는 소켓에 대해서 데이터를 쓰거나 읽는 것으로 통신이 이루어진다. 소켓은 두개 이상의 소켓이 서로 관계를 가지는 것으로 처음으로 유효하게 된다. 예를들어 종이컵전화의 종이컵 부분은 양단의 종이컵을 실로 연결한 그때에 이용이 가능한다. 소켓도 종이컵과 같이 통신상대의 소켓이 가상적인 관계를 가진 그때 처음으로 이용이 가능하게 된다. (단, 통신 방식에 따라서 관계를 가진 쪽이 관계를 가진 상대의 수와는 틀리다.) 서로 관계를 가진 소켓에서는 한 쪽에 씌여진 데이터가 벌서 한족의 소켓으로 나아간다. 그 때문에 사용자는 소켓의 뒤쪽에서 움직이는 복잡한 통신 프로토콜을 의식하지 않고 통신을 할수있다. 윈속으로 소켓 만들기 윈속에서는 sock..
이 프로그램은 Win32콘솔 응용 프로그램으로 프로젝트를 만드는 것으로 한다. ----------------------------------------------------------------------- 윈속의 초기화 윈속의 초기화화 종료 처리 WSAStartup, WSACleanup 윈속의 기능을 이용하기 전에는 반드시 윈속의 초기화를 해야된다. 윈속의 초기화는 WSAStartup()으로 한다. WSAStartup()은 처음에 한번만 호출하면된다. 윈속의 기능을 종료할때는 WSACleanup()으로 한다. WSACleanup은 일반적으로 프로그램의 마지막이나 종료처리에서 실행된다. ==================================================================..
윈속 프로그래밍 관련된 내용을 나를 위해 정리 ---------------------------------------------------- WinSock의 명칭은 Windows Sockets에서 옴. Winsock은 이름 그래도 윈도우즈에서 소켓을 이용하요 프로그램을 짜기위한 API(Application Program Interface)이다. Winsock을 쓰면 TCP/IP등의 인터넷을 이용해 통신을 하는 프로그램을 짤수있다. 앞으로 공부할 winsock의 버전은 2.0이다. Winsock이 지원하는 윈도우즈 버젼은 95, 98, NT, Me, 2000, XP등의 전 버젼이다. 참고로 내 개발 환경은 XP Pro에 VS 2005를 쓰고 있다. --------------------------------..