'진짜 양식/C++'에 해당되는 글 2건

  1. 2009/11/24 Lukavega 간단한 윈속 서버 겸 클라이언트
  2. 2009/08/17 Lukavega LNK4208

#include <stdio.h>
#include <winsock2.h>
#include <conio.h>
#define BUFSIZE 1024
char m[BUFSIZE];
WSADATA wsaData;
char k;
short mysend;
SOCKET sock = INVALID_SOCKET, sListen;
void server();
void client();
void Error(char* m);
void Error(char* m){
 fputs(m, stdout);
 fputs("\n", stdout);
 system("PAUSE");
 exit(-1);
}


int main(){
 if (WSAStartup(MAKEWORD(2,2), &wsaData)!=0)
  Error("Error! WSA START Error.");
 while(1){
  system("cls");
  printf("Server Or Client? (S or C) -");
  fflush(stdin);
  k = getch();
  switch(k){
  case 's':
  case 'S':
   sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
   server();
   mysend = 1;
   break;
  case 'c':
  case 'C':
   sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
   client();
   mysend = -1;
   break;
  }
  if(sock!=INVALID_SOCKET) break;
 }
 while(1){
  memset(m, 0, BUFSIZE);
  if(mysend==1){
   printf("보낼 메세지:");
   fflush(stdin);
   fgets(m, BUFSIZE-1, stdin);
   if(send(sock, m, strlen(m)-1, 0)==SOCKET_ERROR)
    Error("보내는 도중 에러\n");
   printf("상대방에게 잘 전달됨\n");
  }
  else if(mysend==-1){
   printf("상대방이 메세지를 보내는중\n");
   if(recv(sock, m, BUFSIZE-1, 0)==SOCKET_ERROR)
    Error("메세지받는 도중 에러\n");
   printf("받은 메세지");
   fputs(m, stdout);
   fputs("\n", stdout);
  }
  mysend = -mysend;
 }
 closesocket(sock);
 closesocket(sListen);
 WSACleanup();
 return 0;
}

void server(){
 SOCKADDR_IN clntaddr, addr;
 int clntsize = sizeof(clntaddr);
 unsigned short port;
 
 printf("\n Server Start\n");
 printf("Port: ");
 fflush(stdin);
 scanf("%d", &port);
 
 sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
 memset(&addr, 0, sizeof(addr));
 addr.sin_addr.s_addr = htonl(INADDR_ANY);
 addr.sin_family = AF_INET;
 addr.sin_port = htons(port);
 
 if (bind(sListen, (SOCKADDR*)&addr, sizeof(addr)) == SOCKET_ERROR)
  Error("Bind Error\n");
 if (listen(sListen, 5)==SOCKET_ERROR)
  Error("LISTEN Error");
 
 printf("서버열기 완료 \n 상대방의 접속을 기다림\n");
 sock = accept(sListen, (SOCKADDR*)&clntaddr, &clntsize);
 return ;
 
}

void client(){
 SOCKADDR_IN addr;
 unsigned short port;
 char ip[20];
 
 printf("\nClient Start\n");
 printf("IP:");
 fflush(stdin);
 scanf("%s", ip);
 printf("port:");
 scanf("%d", &port);
 memset(&addr, 0, sizeof(addr));
 addr.sin_addr.s_addr = inet_addr(ip);
 addr.sin_family = AF_INET;
 addr.sin_port = htons(port);
 
 if (connect(sock, (SOCKADDR*)&addr, sizeof(addr)) == SOCKET_ERROR)
  Error("Connect Error\n");
 return;
 
}

-------------------------------------------------------
서버와 클라이언트간 1대1 채팅프로그램.
실행하자마자 s를 입력하면 서버, c를 입력하면 클라이언트로 동작합니다.

VS6.0의 경우,
project > settings... > Link > Object/binary modules 에
ws2_32.lib를 추가해야합니다.

2009/11/24 13:43 2009/11/24 13:43
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://lukavega.untoc.com/tc/rss/response/33

댓글+트랙백 ATOM :: http://lukavega.untoc.com/tc/atom/response/33

LNK4208

진짜 양식/C++ 2009/08/17 09:54 Lukavega

Debug 폴더를 삭제하고 다시 빌드하면 됩니다.




Visual C++ 개념: C/C++ 프로그램 빌드
링커 도구 경고 LNK4208

업데이트: 2007년 11월

오류 메시지

'filename'에 호환되지 않는 PDB 형식이 있습니다. 삭제한 다음 다시 빌드하십시오. 디버그 정보가 없는 것처럼 개체를 링크합니다.
incompatible PDB format in 'filename'; delete and rebuild; linking object as if no debug info

파일의 .pdb 형식이 호환되지 않습니다. .pdb를 삭제한 다음 다시 빌드하십시오.

이전 버전의 Visual C++로 빌드한 .obj 또는 .lib를 사용하는 경우와 해당 파일에 이와 관련된 .pdb 파일이 포함된 경우에 /DEBUG(디버깅 정보 생성)로 링크하면 LNK4208이 발생합니다. 이러한 경우에는 /DEBUG를 사용하지 말거나 이전 .pdb 파일을 삭제한 다음 다시 빌드하십시오.

컴파일러와 링커가 일치하지 않는 경우 이 오류가 발생할 수 있습니다. 예를 들어, 컴파일러는 현재 버전의 Visual C++이고 링커는 이전 버전일 경우입니다.

2009/08/17 09:54 2009/08/17 09:54
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://lukavega.untoc.com/tc/rss/response/31

댓글+트랙백 ATOM :: http://lukavega.untoc.com/tc/atom/response/31