12조 통네최종보고서
본 자료는 7페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
해당 자료는 7페이지 까지만 미리보기를 제공합니다.
7페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

12조 통네최종보고서에 대한 보고서 자료입니다.

목차

I. 서론
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;
}
  • 가격1,900
  • 페이지수22페이지
  • 등록일2015.09.12
  • 저작시기2014.2
  • 파일형식한글(hwp)
  • 자료번호#981395
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니