|
제가 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();
}
}
}
|