下面是小弟寫的程式碼:
//主程式:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
MyThread=new TSocketThread(true,"127.0.0.1",9999,"aaaa");
MyThread->FreeOnTerminate=true;
MyThread->Resume();
}
//Unit2.h:
#ifndef Unit2H
#define Unit2H
//-------------------------------------------------------------------
#include
#include
//-------------------------------------------------------------------
class TSocketThread : public TThread
{
private: void __fastcall tSendDD();
AnsiString tE,tServiceIP;
int tPor;
TClientSocket *tClientSocket;
__fastcall ~TSocketThread();
protected:
void __fastcall Execute();
public:
__fastcall TSocketThread(bool CreateSuspended,
AnsiString tIP,int tPort,AnsiString tText);
};
//-------------------------------------------------------------------
#endif
//Unit2.cpp:
#include
#pragma hdrstop #include "Unit2.h"
#include "Client.h"
#pragma package(smart_init)
//-------------------------------------------------------------------
__fastcall TSocketThread::TSocketThread(bool CreateSuspended,AnsiString tIP,int tPort,AnsiString tText)
: TThread(CreateSuspended)
{
tServiceIP=tIP;
tPor=tPort;
tE=tText;
tClientSocket=new TClientSocket(Form1->Owner);
}
//-------------------------------------------------------------------
void __fastcall TSocketThread::Execute()
{
AnsiString ccca;
tClientSocket->Close();
tClientSocket->Address=tServiceIP;
tClientSocket->Port=tPor;
tClientSocket->Open();
Sleep(1);
Application->ProcessMessages();
tSendDD();
Sleep(100);
ccca=tClientSocket->Socket->ReceiveText();
ShowMessage(ccca);
Terminate();
//---- Place thread code here ----
}
//------------------------------------------------------------------
void __fastcall TSocketThread::tSendDD()
{
tClientSocket->Socket->SendText(tE); }
//-------------------------------------------------------------------
__fastcall TSocketThread::~TSocketThread()
{
//TODO: Add your source code here
tClientSocket->Close();
delete tClientSocket;
}
以上是小弟寫的Therad部份的程式碼,Sever那邊能夠收到Client所送的aaaa的字串,而Client也能收到由Sever所回傳的字串然後由ShowMessage顯示出來。
小弟有幾個問題想請問各位前輩。
1.tClientSocket=new TClientSocket(
Form1->Owner);紅色字體部份如果我設NULL的話Client也可以正確的傳送字串給Server請問那個是在設定什麼東西?
2.ShowMessage(ccca);將Server回傳的字串用Messagebox顯示出來,不過每次Messagebox的大小有時會忽大忽小的,有時候沒有字串顯出來(確定有收到字串)這有辦法解決嗎?下面是小弟寫的程式碼:
//主程式:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
MyThread=new TSocketThread(true,"127.0.0.1",9999,"aaaa");
MyThread->FreeOnTerminate=true;
MyThread->Resume();
}
//Unit2.h:
#ifndef Unit2H
#define Unit2H
//-------------------------------------------------------------------
#include
#include
//-------------------------------------------------------------------
class TSocketThread : public TThread
{
private: void __fastcall tSendDD();
AnsiString tE,tServiceIP;
int tPor;
TClientSocket *tClientSocket;
__fastcall ~TSocketThread();
protected:
void __fastcall Execute();
public:
__fastcall TSocketThread(bool CreateSuspended,
AnsiString tIP,int tPort,AnsiString tText);
};
//-------------------------------------------------------------------
#endif
//Unit2.cpp:
#include
#pragma hdrstop #include "Unit2.h"
#include "Client.h"
#pragma package(smart_init)
//-------------------------------------------------------------------
__fastcall TSocketThread::TSocketThread(bool CreateSuspended,AnsiString tIP,int tPort,AnsiString tText)
: TThread(CreateSuspended)
{
tServiceIP=tIP;
tPor=tPort;
tE=tText;
tClientSocket=new TClientSocket(Form1->Owner);
}
//-------------------------------------------------------------------
void __fastcall TSocketThread::Execute()
{
AnsiString ccca;
tClientSocket->Close();
tClientSocket->Address=tServiceIP;
tClientSocket->Port=tPor;
tClientSocket->Open();
Sleep(1);
Application->ProcessMessages();
tSendDD();
Sleep(100);
ccca=tClientSocket->Socket->ReceiveText();
ShowMessage(ccca);
Terminate();
//---- Place thread code here ----
}
//------------------------------------------------------------------
void __fastcall TSocketThread::tSendDD()
{
tClientSocket->Socket->SendText(tE); }
//-------------------------------------------------------------------
__fastcall TSocketThread::~TSocketThread()
{
//TODO: Add your source code here
tClientSocket->Close();
delete tClientSocket;
}
以上是小弟寫的Therad部份的程式碼,Sever那邊能夠收到Client所送的aaaa的字串,而Client也能收到由Sever所回傳的字串然後由ShowMessage顯示出來。
小弟有幾個問題想請問各位前輩。
1.tClientSocket=new TClientSocket(
Form1->Owner);紅色字體部份如果我設NULL的話Client也可以正確的傳送字串給Server請問那個是在設定什麼東西?
2.ShowMessage(ccca);將Server回傳的字串用Messagebox顯示出來,不過每次Messagebox的大小有時會忽大忽小的,有時候沒有字串顯出來(確定有收到字串)這有辦法解決嗎?
3.如果連續多按幾次Button1時有時候會出現如圖的錯誤訊息,這是為什麼?要如何解決?
4.一般在TForm1中使用ClientSocket1如果Server有傳東西過來的話會觸發TForm1::ClientSocket1Read的event,然後在使用Socket->ReceiveText();去接字串。如果我是在Thread中新增的tClientSocket有辦法寫一個tClientSocketRead的event嗎?可以的話要如何寫?
以上就是小弟想問的問題,麻煩各位先進了。