728x90
반응형
#include <stdio.h>
#include <string>
#include <stdlib.h>
#include <winsock2.h>
#define QLEN 10
#define PORT 10020
int main(int argc, char* argv[])
{
struct sockaddr_in ServerAddr; /* 서버의 주소 구조체 */
struct sockaddr_in ClientAddr; /* 클라이언트의 주소 구조체 */
SOCKET serverSocket, clientSocket; /* 서버,클라이언트 소켓의 기술자 */
int port = PORT ; /* 서버 프로그램의 포트 번호 */
int addrlen; /* 주소의 길이 */
int recvbyte = 0; /* 수신한 데이터의 길이 */
char buf[10]; /* 서버가 전송할 데이터 저장 버퍼 */
// 윈도우 운영체제에서 필요한 설정
WSADATA wsaData;
if (WSAStartup(MAKEWORD (2, 2), &wsaData) != 0)
return -1;
// 서버의 주소 구조체 초기화: 내용을 memset 함수로 모두 0으로 초기화한 후에
// 각 필드에 필요한 값들을 설정한다.
// 따라서, 값이 설정되지 않은 필드는 0으로 초기화된다.
memset(&ServerAddr, 0, sizeof(ServerAddr));
ServerAddr.sin_family = AF_INET; /* 인터넷 주소 체계 설정 */
ServerAddr.sin_port = htons(port); /* 포트 번호 설정 */
ServerAddr.sin_addr. s_addr = htonl(INADDR_ANY ); /* 모든 IP주소로 설정*/
// 서버의 메인 소켓 생성
serverSocket = socket( PF_INET, SOCK_STREAM , 0);
if (serverSocket < 0) {
printf( "소켓 생성 실패\n" );
exit(1);
}
// 서버의 주소 구조체를 생성한 소켓에 연계
if (bind(serverSocket, (struct sockaddr *)&ServerAddr, sizeof(ServerAddr)) < 0) {
printf( "bind 함수 실패\n" );
exit(1);
}
// 클라이언트로부터의 연결을 대기
if (listen(serverSocket, QLEN ) < 0) {
printf( "listen 함수 실패 \n" );
exit(1);
}
while (1) /* 서버 프로그램은 종료되지 않고 무한히 수행 */
{
//클라이언트로부터의 요청을 받아 연결하고, 통신을 위한 소켓을 생성
printf( "클라이언트로부터 접속을 기다리는 중\n" );
addrlen = sizeof(ClientAddr);
if ((clientSocket = accept(serverSocket, (struct sockaddr *)&ClientAddr, &addrlen)) < 0)
{
printf( "클라이언트와의 연결 실패\n" );
exit(1);
}
//연결된 클라이언트로부터 메시지 수신
recvbyte = recv(clientSocket, buf, sizeof(buf), 0);
if (recvbyte < 0)
{
printf( " 메시지 수신 실패\n" );
exit(1);
}
buf[recvbyte] = '\0';
printf( "수신한 메시지:%s\n" , buf); /* 수신한 메시지 출력 */
send(clientSocket, buf, strlen(buf), 0); /* 서버에게 메시지 전송 */
closesocket(clientSocket); /* 통신한 클라이언트와의 연결을 종료*/
}
closesocket(serverSocket); /* 이하 부분은 수행되지 않는댜 */
WSACleanup();
return 0;
}
반응형
'엔지니어 > C++' 카테고리의 다른 글
socket_test_client (0) | 2016.05.26 |
---|---|
agent server (create by sk) (0) | 2016.05.26 |
agent server makefile (create by sk) (0) | 2016.05.26 |
agent client makefile (create by sk) (0) | 2016.05.26 |
j2-agent(/etc/init.d/) (create by sk) (0) | 2016.05.26 |