|
좀 어렵게 하시네요
TClientSocket , TServerSocket은?
타입이 Blocking 모드 보다 NonBlocking 모드가 코딩이 간편하고
더 잘맞는것 같습니다.
대개 TClientSocket , TServerSocket 은 NonBlocking 모드로 대게 쓰구요..
...
간단하게..
둘다 NonBlocking 으로 설정하시구요
서버는 OnClientRead이벤트 함수에서
ServerSocket1ClientRead 읽으시면 되구요
클라이언트는 OnRead이벤트에서 읽으시면 됩니다. ClientSocket1Read
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
String str=Socket->ReceiveText();
Memo1->Lines->Add(str);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
TCustomWinSocket *Socket)
{
String str=Socket->ReceiveText();
Memo1->Lines->Add(str);
}
//---------------------------------------------------------------------------
그럼..
mister 님이 쓰신 글 :
: 제가 BCB4로 처음 시도를 해 보는데요..
: client와 sever 간에 처음 접속은 되더군요..
: OnAccept, OnConnect 이벤트는 서버쪽에서 알아 듣습니다. 하지만 OnGetThread는 전혀 알아 듣지 못하네요..
: 그리고 client쪽에서 ClientSocket->SenText("~~~~")를 해주면 Server쪽에선 OnGetSocket 쪽에서 처리를 해 줘야
: 하나요.. help에서는 소켓 쓰레드와 스트림을 쓰던데 그 방법대로 해도 OnGetThread가 안되고요..
: 클라이언트에서 값을 pStream->Write(~~~)하면 몇번을 쓰고 멈춰 버리더군요..
:
:
: 강좌나 질답을 검색해도, 제가 처음이라 안되네요.. 소스를 올려보겠습니다.
: 잘못된 부분이나 추가 해야 할 사항이 있으면 알려주세요..
: 간단하게 문자를 주고 받는 정도만 이해 하면 됩니다.
:
:
:
: //-------------------- 클라이언트 쪽 -------------------------------
:
: //접속 버튼 입니다.
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
: if (ClientSocket1->Active)
: {
: ClientSocket1->Active = false;
: Sleep(1000);
: }
:
:
:
: try
: {
: ClientSocket1->ClientType = ctBlocking;
: ClientSocket1->Host = "192.168.10.125";
: ClientSocket1->Port = 8080;
: ClientSocket1->Active = true;
: ShowMessage(" ++ Server 에 접속합니다. ++ ");
: }
: catch ( ... )
: {
: ShowMessage(" ++ Server 접속에 실패 했습니다, 서버를 실행해 주세요 ! ++ ");
: }
: }
:
: //OnConnect 이벤트
: void __fastcall TForm1::ClientSocket1Connect(TObject *Sender,
: TCustomWinSocket *Socket)
: {
: cliSocket = Socket;
: Memo1->Lines->Append("Client Connect to Server");
:
: }
: //
:
: //메시지를 보내는 부분입니다.
: void __fastcall TForm1::SendSocket()
: {
: char sendBuffer[BUFFERSIZE];
: char buffer[BUFFERSIZE];
: bool bCompleted = false;
: memset(sendBuffer, '\0', BUFFERSIZE);
:
: while (!bCompleted && cliSocket->Connected)
: {
: try
: {
: TWinSocketStream* pStream = new TWinSocketStream(cliSocket, CLIENTWAITTIME);
:
: try
: {
: //서버로 보내고
: memset(buffer, '\0', BUFFERSIZE);
: memset(sendBuffer, '\0', BUFFERSIZE);
: Form1->Memo1->Lines->Append("Send to Serever");
: strcpy(sendBuffer, "Client Message!");
: pStream->Write(sendBuffer, strlen(sendBuffer));
:
: //받으려 합니다.
: if (pStream->WaitForData(CLIENTWAITTIME))
: {
: Form1->Memo1->Lines->Append("receive data");
: if (pStream->Read(buffer, BUFFERSIZE) == 0)
: cliSocket->Close();
: else
: {
: Form1->Memo2->Lines->Append(AnsiString(buffer));
: Form1->Memo2->Lines->Append("receive Message");
:
: bCompleted = true;
: //code here
: }
: }
: else
: {
: Form1->Memo1->Lines->Append("wait fail");
: cliSocket->Close();
: }
: }
: __finally
: {
: delete pStream;
: }
: }
: catch (...)
: {
: Memo1->Lines->Append("Fail Stream");
: }
: }
:
: if(cliSocket->Connected)
: {
: cliSocket->Close();
: }
:
:
: }
:
: //------------------------------- 서버 쪽---------------------------------------
:
: //Thread
: void __fastcall TForm1::ServerSocket1GetThread(TObject *Sender,
: TServerClientWinSocket *ClientSocket,
: TServerClientThread *&SocketThread)
: {
: SocketThread = new TMyServerThread(false, ClientSocket);
: }
: //
:
:
: //처리 부분
:
:
:
: void __fastcall TMyServerThread::ClientExecute(void)
: {
: char sendBuffer[BUFFERSIZE];
: char buffer[BUFFERSIZE];
:
: while (!Terminated && ClientSocket->Connected)
: {
: Form1->Memo2->Lines->Append("recieve message");
:
: try
: {
: TWinSocketStream* pStream = new TWinSocketStream(ClientSocket, CLIENTWAITTIME);
:
: try
: {
: memset(sendBuffer, '\0', BUFFERSIZE);
: memset(buffer, '\0', BUFFERSIZE));
:
: if (pStream->WaitForData(CLIENTWAITTIME))
: {
: Form1->Memo1->Lines->Append("receive data");
: if (pStream->Read(buffer, BUFFERSIZE) == 0)
: ClientSocket->Close();
: else
: {
: Form1->Memo2->Lines->Append(AnsiString(buffer));
: Form1->Memo1->Lines->Append("Send to Client");
: strcpy(sendBuffer, "receive ok");
: pStream->Write(sendBuffer, strlen(sendBuffer));
: memset(buffer, '\0', BUFFERSIZE);
:
: //code here
: }
: }
: else
: {
: Form1->Memo1->Lines->Append("wait fail");
: ClientSocket->Close();
: }
: }
: __finally
: {
: delete pStream;
: }
: }
: catch (...)
: {
: HandleException();
: }
:
: }
: }
|