목차
I. 서론
II. 설계/프로젝트의 현실적 제한조건
III. 설계 요약
IV. 설계 결정의 논의
V. 설계 평가
VI. 결론
VII. 부록 (소스코드 , 실행화면)
II. 설계/프로젝트의 현실적 제한조건
III. 설계 요약
IV. 설계 결정의 논의
V. 설계 평가
VI. 결론
VII. 부록 (소스코드 , 실행화면)
본문내용
gned long sender;
unsigned long receiver;
unsigned int Seq_num : 1;
unsigned int ACK_num : 1;
unsigned int A : 1;
char Data[100];
}header;
int main(int argc, char **argv)
{
WSADATA wsd;
char buffer; //에러 호출후 바로 종류되는걸 막아 오류 확인을 위한 버퍼
int i = 1;
char message[1024] = { 0 };
int s, ns, addrsize; //소켓, 서버 주소, 클라이언트 주소를 받을 변수
int return_num = 0;
int szClntAddr;
char port[10] = "7931";
SOCKADDR_IN client, server;
if (WSAStartup(MAKEWORD(2, 2), &wsd) != 0)
{
printf("winsocket error");
scanf("%c", &buffer);
return 1;
}
server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY; //로컬 서버
server.sin_port = htons(PORT);
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (bind(s, (SOCKADDR *)&server, sizeof(server)) == SOCKET_ERROR)
{
printf("bind error");
WSACleanup();
scanf("%c", &buffer);
return 2;
}
listen(s, 2);
printf("서버 대기, 신호를 기다리는 중...\n");
addrsize = sizeof(client);
ns = accept(s, (SOCKADDR*)&client, &addrsize);
if (ns == INVALID_SOCKET)
{
printf("accept() error\n");
WSACleanup();
scanf("%c", &buffer);
return 3;
}
printf("%s:%d로 접속\n", inet_ntoa(client.sin_addr), ntohs(client.sin_port));
while (return_num != SOCKET_ERROR) //SOCKET_ERROR 0 이면 종료
{
WSADATA wsaData; //소켓 초기화
SOCKET hServSock;
SOCKET hClntSock;
SOCKADDR_IN servAddr;
SOCKADDR_IN clntAddr;
//i = 1; //frame 수신 횟수
header frame; //수신받고 ack를 전송할 frame
printf("GO-BACK-N ARQ ");
printf("│Receiver│\n\n");
hServSock = socket(AF_INET, SOCK_STREAM, 0); //소켓 생성
memset(&servAddr, 0, sizeof(servAddr));
servAddr.sin_family = AF_INET; //구조체 세팅
servAddr.sin_addr.s_addr = htonl(INADDR_ANY);
servAddr.sin_port = htons(atoi(port));
szClntAddr = sizeof(clntAddr);
//서버에 접속한 클라이언트와 통신할 수 있도록 새로운 소켓을 생성하여 리턴
hClntSock = accept(hServSock, (SOCKADDR*)&clntAddr, &szClntAddr);
// FRAME
// ┌────┬────┬─┬──┐
// │Seq_num │ ACK_num│A │Data│
// └────┴────┴─┴──┘
// A=0 : ACK
// A=1 : NAK
printf("\t\t │Seq│ Ack│ A │ Data │\n");
printf("─────────────────────────────\n");
srand(time(NULL));
while (i <= 20)
{ //20개의 frame을 수신
//sender로 부터 frame 수신
recv(hClntSock, (char *)&frame, sizeof(frame), 0);
printf("[%2d] ", i); //frame수신 수 출력
frame.A = rand() % 2; //전송률 50%
if (frame.A == 1){ //frame 수신 실패
printf("seq:%d frame loss ", frame.Seq_num);
printf("\t\t\t\t NAK send\n");
//sender로 NAK 전송
send(hClntSock, (char *)&frame, sizeof(frame), 0);
continue;
}
else{ //frame 수신 성공
printf("seq:%d receive ", frame.Seq_num);
printf(" │ %d │ %d │ %d │ Data │", frame.Seq_num, frame.ACK_num, frame.A);
frame.ACK_num += 1; // ack 증가
printf(" ACK send\n");
send(hClntSock, (char *)&frame, sizeof(frame), 0);
printf("─────────────────────────────\n");
}
i++;
}
return_num = recv(ns, message, 1024, 0);
printf("받은 메시지의 크기 : %d byte\n", return_num);
if (return_num == SOCKET_ERROR)
break;
return_num = send(ns, message, return_num, 0);
printf("보낸 메시지의 내용 : %s\n", message);
memset(message, 0, 1024);
}
printf("접속을 종료\n"); //접속 종류 문구
closesocket(ns);
closesocket(s);
WSACleanup();
printf("\n종료하려면 아무 글자나 입력하시오 :");
scanf("%c", &buffer); //버퍼
return 0;
}
unsigned long receiver;
unsigned int Seq_num : 1;
unsigned int ACK_num : 1;
unsigned int A : 1;
char Data[100];
}header;
int main(int argc, char **argv)
{
WSADATA wsd;
char buffer; //에러 호출후 바로 종류되는걸 막아 오류 확인을 위한 버퍼
int i = 1;
char message[1024] = { 0 };
int s, ns, addrsize; //소켓, 서버 주소, 클라이언트 주소를 받을 변수
int return_num = 0;
int szClntAddr;
char port[10] = "7931";
SOCKADDR_IN client, server;
if (WSAStartup(MAKEWORD(2, 2), &wsd) != 0)
{
printf("winsocket error");
scanf("%c", &buffer);
return 1;
}
server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY; //로컬 서버
server.sin_port = htons(PORT);
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (bind(s, (SOCKADDR *)&server, sizeof(server)) == SOCKET_ERROR)
{
printf("bind error");
WSACleanup();
scanf("%c", &buffer);
return 2;
}
listen(s, 2);
printf("서버 대기, 신호를 기다리는 중...\n");
addrsize = sizeof(client);
ns = accept(s, (SOCKADDR*)&client, &addrsize);
if (ns == INVALID_SOCKET)
{
printf("accept() error\n");
WSACleanup();
scanf("%c", &buffer);
return 3;
}
printf("%s:%d로 접속\n", inet_ntoa(client.sin_addr), ntohs(client.sin_port));
while (return_num != SOCKET_ERROR) //SOCKET_ERROR 0 이면 종료
{
WSADATA wsaData; //소켓 초기화
SOCKET hServSock;
SOCKET hClntSock;
SOCKADDR_IN servAddr;
SOCKADDR_IN clntAddr;
//i = 1; //frame 수신 횟수
header frame; //수신받고 ack를 전송할 frame
printf("GO-BACK-N ARQ ");
printf("│Receiver│\n\n");
hServSock = socket(AF_INET, SOCK_STREAM, 0); //소켓 생성
memset(&servAddr, 0, sizeof(servAddr));
servAddr.sin_family = AF_INET; //구조체 세팅
servAddr.sin_addr.s_addr = htonl(INADDR_ANY);
servAddr.sin_port = htons(atoi(port));
szClntAddr = sizeof(clntAddr);
//서버에 접속한 클라이언트와 통신할 수 있도록 새로운 소켓을 생성하여 리턴
hClntSock = accept(hServSock, (SOCKADDR*)&clntAddr, &szClntAddr);
// FRAME
// ┌────┬────┬─┬──┐
// │Seq_num │ ACK_num│A │Data│
// └────┴────┴─┴──┘
// A=0 : ACK
// A=1 : NAK
printf("\t\t │Seq│ Ack│ A │ Data │\n");
printf("─────────────────────────────\n");
srand(time(NULL));
while (i <= 20)
{ //20개의 frame을 수신
//sender로 부터 frame 수신
recv(hClntSock, (char *)&frame, sizeof(frame), 0);
printf("[%2d] ", i); //frame수신 수 출력
frame.A = rand() % 2; //전송률 50%
if (frame.A == 1){ //frame 수신 실패
printf("seq:%d frame loss ", frame.Seq_num);
printf("\t\t\t\t NAK send\n");
//sender로 NAK 전송
send(hClntSock, (char *)&frame, sizeof(frame), 0);
continue;
}
else{ //frame 수신 성공
printf("seq:%d receive ", frame.Seq_num);
printf(" │ %d │ %d │ %d │ Data │", frame.Seq_num, frame.ACK_num, frame.A);
frame.ACK_num += 1; // ack 증가
printf(" ACK send\n");
send(hClntSock, (char *)&frame, sizeof(frame), 0);
printf("─────────────────────────────\n");
}
i++;
}
return_num = recv(ns, message, 1024, 0);
printf("받은 메시지의 크기 : %d byte\n", return_num);
if (return_num == SOCKET_ERROR)
break;
return_num = send(ns, message, return_num, 0);
printf("보낸 메시지의 내용 : %s\n", message);
memset(message, 0, 1024);
}
printf("접속을 종료\n"); //접속 종류 문구
closesocket(ns);
closesocket(s);
WSACleanup();
printf("\n종료하려면 아무 글자나 입력하시오 :");
scanf("%c", &buffer); //버퍼
return 0;
}
키워드
추천자료
[유비쿼터스] 인공지능 : 지능형 홈 네트워크의 현 주소와 전망
SOC투자전략으로서 프로젝트 파이낸싱 적용현황 및 사례분석
비동기식 전송모드(ATM) 네트워크를 위한 보안시스템 설계
MPLS VPN 프로젝트
[ATM][ATM 기술][ATM 활용][무선][네트워크][ATM 장단점][ATM 셀 처리 장치][ATM 기술 동향][...
[VoIP][음성패킷망]VoIP(음성패킷망)의 정의, VoIP(음성패킷망)의 등장, VoIP(음성패킷망)의 ...
[음성패킷망][VoIP]음성패킷망(VoIP)의 발전사, 음성패킷망(VoIP)의 정의, 음성패킷망(VoIP)...
[일본 100교 프로젝트]일본 교육정보화의 목표, 일본 교육정보화의 현황, 일본 교육정보화의 ...
[프로젝트 연구계획서] Zigbee GPS 모듈을 이용한 위치 추적 시스템 (Version 1.0)
[방통대 e 비지니스 공통] 1. 네트워크를 구성하는 시스템을 구분하는 기준은 물리적 기준과 ...
[정보통신기술(ICT)][전자민주주의]정보통신기술(ICT)과 전자민주주의, 기술협력, 정보통신기...
무선이동통신 분류, 무선이동통신 성장과정, 무선이동통신 가입자현황, 무선이동통신 통신사1...
무선이동통신의 특성, 무선이동통신의 기기, 무선이동통신의 동향, 무선이동통신의 통신사1(K...
[방통대 e-비즈니스 과제물 (공통)] 네트워크에서 소통을 위해 가장 중요시 되는 프로토)을 ...
소개글