C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[6743] Re:소켓에 대하여.
방태윤 [nabty] 2633 읽음    2001-04-11 14:42
컴퍼넌트 없이 소켓해봤던 겁니다.
대충 되는것만 확인하곤 더 이상 테스트는 안했어서
잘 살펴서 이용해 보시기 바랍니다...

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------

#define WSA_READ (WM_USER + 1)
#define NO_FLAGS_SET 0  // Used with recv()/send()

class TForm1 : public TForm
{
__published: // IDE-managed Components
  TButton *Button1;
  TMemo *Memo1;
  TEdit *Edit1;
  TButton *Button2;
  void __fastcall Button1Click(TObject *Sender);
  void __fastcall FormDestroy(TObject *Sender);
  void __fastcall Button2Click(TObject *Sender);
private: // User declarations
  void __fastcall WSA_receive(TMessage &Msg);
public: // User declarations
  __fastcall TForm1(TComponent* Owner);

BEGIN_MESSAGE_MAP
  MESSAGE_HANDLER(WSA_READ,TMessage,WSA_receive);
END_MESSAGE_MAP(TForm);

};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


//---------------------------------------------------------------------------

#include <vcl.h>
#include <stdio.h>
#pragma hdrstop
#include <winsock2.h>


#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
{
}
//---------------------------------------------------------------------------

SOCKET sock;

void __fastcall TForm1::Button1Click(TObject *Sender)
{
//connect 부분

  int status;
  WSADATA WSAData;
  char szTemp[80];

  if((status = WSAStartup(MAKEWORD(1,1), &WSAData)) == 0) {
    MessageBox( NULL, WSAData.szDescription, WSAData.szSystemStatus, MB_OK);
  }else{
    sprintf(szTemp, "%d is the err", status);
    MessageBox( NULL, szTemp, "Error", MB_OK);
  }

  sock=socket(AF_INET, SOCK_STREAM, 0);
//  s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
  if(sock==INVALID_SOCKET){
    ShowMessage("invalid socket");
    closesocket( sock );
    return;
  }

//  struct sockaddr_in{
//    short            sin_family;
//    unsigned short      sin_port;
//    struct   in_addr      sin_addr;
//    char               sin_zero[8];
//  };

  struct in_addr addr={210,222,119,142}; //연결할 주소
  SOCKADDR_IN dest_sin;
  dest_sin.sin_family = AF_INET;
  dest_sin.sin_addr=addr;
  dest_sin.sin_port=htons(7458); //포트번호

  if(connect(sock,(PSOCKADDR)&dest_sin,sizeof(dest_sin))<0){
    closesocket( sock );
    MessageBox(NULL, "connect() failed", "Error", MB_OK);
    return;
  }

  if((status=WSAAsyncSelect( sock, Handle, WSA_READ, FD_READ | FD_CLOSE ))>0){
    sprintf(szTemp,"%d (0x%x)");
    MessageBox(NULL,"Error on WSAAsyncSelect()", szTemp, MB_OK);
    closesocket(sock);
    return;
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
  closesocket(sock);
  WSACleanup();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::WSA_receive(TMessage &Msg)
{
//receive
  char buffer[2400];
  if(WSAGETSELECTEVENT(Msg.LParam) == FD_READ) {
    int status=recv((SOCKET)Msg.WParam,buffer,2400,NO_FLAGS_SET);
    if(status){
      buffer[status]='\0';
      Memo1->Lines->Add(buffer);
    }else{
      MessageBox(NULL,"Connection broken","Error", MB_OK);
    }
  }
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
//send
  AnsiString s_str=Edit1->Text.Trim();
  send(sock,s_str.c_str(),s_str.Length(),NO_FLAGS_SET);

}
//---------------------------------------------------------------------------
.끝.



^^; 님이 쓰신 글 :
: 안냐세요.. 요즘 자주 등장하는 궁금이 입니다.
: 여러 많은 분들의 도움 덕분에 저의 지식 또한 늘어가는 것을 피부로 느낄 수 있습니다.
: 한 마디로 감사드리고, 아주 좋은 사이트 인거 같아여...^^
: 이번의 부탁은 ....
: 사실 저의 빌더 버전이 4.x라서 소켓 컴포넌트가 없습니다.
: 그래서 소켓 클래스를 사용해야 하는데 도움말에도 뭐라는지 모르겠고, 헤더 파일도 뭘 추가 해야하는지 모르겠여...T.T
: 소켓에 관련한 예제를 구할 순 없나여?
: 도와주세요...
:

+ -

관련 글 리스트
6741 소켓에 대하여. ^^; 2165 2001/04/11
6743     Re:소켓에 대하여. 방태윤 2633 2001/04/11
6744         이거 혹시 클라이언트 쪽 아닌가여? 죄송하지만 서버 쪽은 여? ^^; ^^; 2228 2001/04/11
6747             그렇군요 -_-; 서버쪽은 안해 봤는데요... 방태윤 2224 2001/04/11
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.