#include <WinSock2.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFFSIZE 1024
void ErrorHandling(char* message);
int main(int argc, char *argv[])
{
// 소켓의 버전을 관리하는 구조체.
WSAData wsaData;
// 소켓
SOCKET hServSock;
SOCKET hClntSock;
// IPv4의 주소 체계를 나타내는 구조체
SOCKADDR_IN servAddr;
SOCKADDR_IN clntAddr;
int strLen = 0;
int szClntAddr;
int clntAddrSize = 0;
char message[] = "Hello World!\n";
if (argc != 2)
{
printf("usage : %s <port>\n",argv[0]);
exit(1);
}
if (WSAStartup(MAKEWORD(2,2), &wsaData) != 0)
{
ErrorHandling("WSAStartup() error!!");
}
// 주소체계, 16비트 tcp ip, 32비트 IPv4주소
hServSock = socket(PF_INET, SOCK_STREAM, 0); // 서버 소켓 생성.
if (hServSock == INVALID_SOCKET)
{
ErrorHandling("socket() error!!");
}
memset(&servAddr,0,sizeof(servAddr));
// 데이터 전송방식을 IPv4로 지정.
servAddr.sin_family = AF_INET;
// 32bit IPv4 할당 하는 부분..
// INADDR_ANY : 내 컴퓨터에 할당된 IP를 자동적으로 찾아줌.
servAddr.sin_addr.s_addr = inet_addr(INADDR_ANY);
// 포트 설정..
servAddr.sin_port = htons(8001);//htons(atoi(argv[1]));
// 왜 포트 설정과 ip설정 하는 부분에서 데이터의 변환이 필요한가?
if( bind(hServSock, (SOCKADDR*)&servAddr,
sizeof(servAddr)) == SOCKET_ERROR)
{
ErrorHandling("bind() error!!");
}
printf("bind() Check!\n");
if( listen(hServSock,5) == SOCKET_ERROR)
{
ErrorHandling("listen() error!!");
}
printf("Listen() Check!\n");
szClntAddr = sizeof(clntAddr);
while(1)
{
printf("accept start!!\n");
hClntSock = accept(hServSock, (SOCKADDR*)&clntAddr, &szClntAddr);
printf("client connect!!\n");
if ( hClntSock == INVALID_SOCKET)
{
ErrorHandling("accept() error!!");
}
recv(hClntSock,message,BUFFSIZE,0);
printf("%s \n",message);
memset(message,0,sizeof(message));
}
// 소켓 종료..
closesocket(hClntSock);
printf("socket close\n");
WSACleanup();
return 0;
}
void ErrorHandling(char* message)
{
fputs(message,stderr);
fputc('\n',stderr);
exit(1);
}
=======================================
위에것이 프로그램이고
오류가
--------------------Configuration: temp - Win32 Debug--------------------
Compiling...
ssd.cpp
C:\Program Files (x86)\Microsoft Visual Studio\MyProjects\temp\ssd.cpp(52) : error C2664: 'inet_addr' : cannot convert parameter 1 from 'unsigned long' to 'const char *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
Error executing cl.exe.
temp.exe - 1 error(s), 0 warning(s)
이렇게 뜨는데 어떻게 해야 되요? ㅠㅠ
servAddr.sin_addr.s_addr = INADDR_ANY;
하면 됨
inet_addr 함수는 문자열넣어야하는데 ㅄ놈
http://effort4137.tistory.com/13
여기서 받아서 돌려본건데 그럼 여기있는거 아예 잘못된거임??
ㅇㅇ
htonl(INADDR_ANY) 아니냐?
INADDR_ANY는 0인데 다른거 해줄필요가 없지