|
안녕하세요... Moony입니다...
버튼4를 클릭하면 접속됐다구 나오는 건 소스상으로는 당연한겁니다...
ClientSk = accept(ServerSk, (struct sockaddr *)&ClientSk, &len);
// 이 accept 함수는 호출했을때 블록킹되질 않구 바로 리턴합니다...
// 단지 성공이냐 실패냐를 리턴할 뿐이죠...
// 그러므로 에러값만 리턴 될 뿐 실행되는 부분이고...
// 그럼 다음 메시지 창이 뜨게 되구요...
// 참고로 listen() 은 새로운 클라이언트가 접속할때 까지 블록킹됩니다...
ShowMessage(ClientSk);
그런데 수야님이 말씀하신게 실행만 시켜도 그렇다면 다른 문제일꺼구요...
제가 말씀드린데로 버튼4를 클릭했을때 그렇다면 위에서 설명한거와 같구요...
어떤걸 말씀하신건지....
수야 님이 쓰신 글 :
: 안녕하세요~
:
: 뭔가 이상해서요..
:
: 해더 public에
:
: SOCKET ServerSk, ClientSk;
: struct sockaddr_in Server, Client;
:
: cpp에 이렇게 해놓구 컴파일하면
:
: 소켓번호는 항상 똑같구
:
: 클라이언트는 프로그램 짜지두 않았는데 접속돼다구 하면서 시작됩니다.
:
: ㅡ.ㅡ
:
: 왜이렇죠?
:
: //---------------------------------------------------------------------------
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
: // socket 생성 성공하면 소켓값을 실패하면 -1 값이 리턴된다.
: ServerSk = socket(AF_INET, SOCK_STREAM, 0);
: if(ServerSk < 0)
: {
: ShowMessage("소켓 생성에 실패하였습니다");
: return;
: }
:
: // 소켓의 구조체 내용
: Server.sin_family = AF_INET;
: Server.sin_addr.s_addr = inet_addr("203.239.173.69");
: // 테스트 후 차환 테스트 ( 자신의 IP를 자동 등록함 )
: // Server.sin_addr.s_addr = htonl(INADDR_ANY);
: Server.sin_port = htons(8000);
: // 위에서 포트 번호를 8000 으로 지정하였지만 0으로 하면 시스템이 배정한
: // 포트 번호로 자동 배정된다.
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::Button2Click(TObject *Sender)
: {
: // 소켓을 열고난후 소켓을 시스템의 포트에 연결시켜 준다
: ServerSk = bind(ServerSk, (struct sockaddr *)&Server, sizeof(ServerSk));
: if(ServerSk < 0)
: ShowMessage("포트 연결에 실패하였습니다.");
:
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::Button3Click(TObject *Sender)
: {
: // listen 상태
: ServerSk = listen(ServerSk, 5);
: if(ServerSk < 0)
: StatusBar1->SimpleText = "대기 상태 불가";
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::Button4Click(TObject *Sender)
: {
: // accept 상태
: int len;
: StatusBar1->SimpleText = "Server : Waiting connect request";
:
: while(1)
: {
: ClientSk = accept(ServerSk, (struct sockaddr *)&ClientSk, &len);
: ShowMessage(ClientSk);
: if(ClientSk > 0)
: {
: StatusBar1->SimpleText = "Server : Client Connect";
: // send시킴
: ClientSk = send(ClientSk, "바보", sizeof("바보"),0);
:
: return;
: }
: }
:
: }
: //---------------------------------------------------------------------------
|