일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- winsock
- 소니
- 문자열
- 초보
- 파이어버드
- VB.NET
- PostgreSQL
- 설치
- dll
- 인스톨
- 셋업
- MFC
- 델파이
- Delphi
- 기초
- Firebird
- 시리얼 통신
- 파라미터
- xml
- Visual Basic
- MySQL
- c#
- WIN32 SDK
- vb
- 입문
- 데이터베이스
- Visual Studio 2005
- SDK
- SQL
- 예제
- Today
- Total
프로그래밍 노트
[winsock 초보 프로그래밍] 07 상대방의 IP어드레스 취득 본문
서버가 클라이언트의 접속을 기다리다가 클라이언트가 접속 되었을때
어느 클라이언트가 접속 했는지 알아야 할때가 있다.
accept가 되어지면 accept함수의 두번째 파라미터에 상대방에 대한 정보가 저장되어진다.
예제는 accept한 상대방의 IP어드레스와 포트를 표시한다.
(IP어드레스는 문제없이 가져오는데 포트를 제대로 못가져온다. -.-;;; )
(왜 이상한 포트 번호가 넘어오는지 모르겠다. -.-????? )
#include <winsock2.h>
#include <stdio.h>
int main()
{
WSADATA wsaData;
SOCKET sockSvr;
SOCKET sockSS;
int nlen;
struct sockaddr_in addrSockSvr;
struct sockaddr_in addrSockclt;
// 윈속 초기화
WSAStartup(MAKEWORD(2, 0), &wsaData);
// 소켓 만들기
sockSvr = socket(AF_INET, SOCK_STREAM, 0);
// 소켓 설정
addrSockSvr.sin_family = AF_INET;
addrSockSvr.sin_port = htons(333);
addrSockSvr.sin_addr.S_un.S_addr = INADDR_ANY;
bind(sockSvr, (struct sockaddr *)&addrSockSvr, sizeof(addrSockSvr));
// TCP클라이언트로 부터 접속 요구를 대기
listen(sockSvr, 5);
while (1) {
// TCP클라이언트로 부터 접속 요구 받기\tab
nlen = sizeof(addrSockclt);
sockSS = accept(sockSvr, (struct sockaddr *)&addrSockclt, &nlen);
// 문자송신
printf("%s 로부터 접속 (포트번호:%d)\n",
inet_ntoa(addrSockclt.sin_addr), // IP어드레스
ntohs(addrSockclt.sin_port)); // 포트번호
send(sockSS, "안녕", 5, 0);
closesocket(sockSS);
}
// 윈속 종료
WSACleanup();
return 0;
}