主题:[讨论]关于socket聊天服务器的问题
聊天服务器采用c++ builder,客户端用的是java,现在的问题是服务器发给客户端的消息,发送完以后需要关闭或者停止服务器的socket,客户端才能接受到服务器的消息,求高手解答。
以下是服务器程序
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button_listenClick(TObject *Sender)
{
ServerSocket_applet->Active=false;
ServerSocket_applet->Port=StrToInt(Edit_port->Text);
ServerSocket_applet->Active=true;
Button_listen->Enabled=false;
Button_stop->Enabled=true;
Edit_port->Enabled=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button_stopClick(TObject *Sender)
{
ServerSocket_applet->Active=false;
Button_listen->Enabled=true;
Button_stop->Enabled=false;
Edit_port->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ServerSocket_appletClientConnect(TObject *Sender,
TCustomWinSocket *Socket)
{ AnsiString Status;
Status=DateTimeToStr(Now())+":"+Socket->RemoteAddress+"("+Socket->RemoteHost+")"+" Connected";
ListBox_log->Items->Add(Status);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ServerSocket_appletClientDisconnect(
TObject *Sender, TCustomWinSocket *Socket)
{ AnsiString Status1;
Status1=DateTimeToStr(Now())+":"+Socket->RemoteAddress+" ("+Socket->RemoteHost+") "+" Disconnected";
ListBox_log->Items->Add(Status1);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ServerSocket_appletClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{ String Is_read;
Is_read=Socket->ReceiveText();
Memo_data->Lines->Add(DateTimeToStr(Now())+" 收到来自 "+Socket->RemoteAddress+"("+Socket->RemoteHost+") 的数据"+":"+Is_read);
//Memo_data->Text=Memo_data->Text+DateTimeToStr(Now())+" 收到来自 "+Socket->RemoteAddress+"("+Socket->RemoteHost+") 的数据"+":"+Is_read;
//Socket->SendText(DateTimeToStr(Now())+" "+Socket->RemoteAddress+"("+Socket->RemoteHost+")"+":"+Is_read);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button_exitClick(TObject *Sender)
{
ServerSocket_applet->Close();
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ServerSocket_appletAccept(TObject *Sender,
TCustomWinSocket *Socket)
{
AnsiString strPrompt="服务器消息:"+Socket->RemoteHost+"加入";
// for(int i=0;i<ServerSocket_applet->Socket->ActiveConnections;i++)
// ServerSocket_applet->Socket->Connections[i]->SendText(strPrompt);
Memo1->Lines->Add(strPrompt);
//StatusBar1->Panels->Items[0]->Text=strPrompt;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString strPrompt1="服务器消息:"+Edit1->Text;
for(int i=0;i<ServerSocket_applet->Socket->ActiveConnections;i++)
ServerSocket_applet->Socket->Connections[i]->SendText(Edit1->Text);
//ServerSocket_applet->Active=false;
//ServerSocket_applet->Port=StrToInt(Edit_port->Text);
//ServerSocket_applet->Active=true;
Memo_data->Lines->Add(strPrompt1);
Edit1->Text="";
}
//---------------------------------------------------------------------------
以下是服务器程序
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button_listenClick(TObject *Sender)
{
ServerSocket_applet->Active=false;
ServerSocket_applet->Port=StrToInt(Edit_port->Text);
ServerSocket_applet->Active=true;
Button_listen->Enabled=false;
Button_stop->Enabled=true;
Edit_port->Enabled=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button_stopClick(TObject *Sender)
{
ServerSocket_applet->Active=false;
Button_listen->Enabled=true;
Button_stop->Enabled=false;
Edit_port->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ServerSocket_appletClientConnect(TObject *Sender,
TCustomWinSocket *Socket)
{ AnsiString Status;
Status=DateTimeToStr(Now())+":"+Socket->RemoteAddress+"("+Socket->RemoteHost+")"+" Connected";
ListBox_log->Items->Add(Status);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ServerSocket_appletClientDisconnect(
TObject *Sender, TCustomWinSocket *Socket)
{ AnsiString Status1;
Status1=DateTimeToStr(Now())+":"+Socket->RemoteAddress+" ("+Socket->RemoteHost+") "+" Disconnected";
ListBox_log->Items->Add(Status1);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ServerSocket_appletClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{ String Is_read;
Is_read=Socket->ReceiveText();
Memo_data->Lines->Add(DateTimeToStr(Now())+" 收到来自 "+Socket->RemoteAddress+"("+Socket->RemoteHost+") 的数据"+":"+Is_read);
//Memo_data->Text=Memo_data->Text+DateTimeToStr(Now())+" 收到来自 "+Socket->RemoteAddress+"("+Socket->RemoteHost+") 的数据"+":"+Is_read;
//Socket->SendText(DateTimeToStr(Now())+" "+Socket->RemoteAddress+"("+Socket->RemoteHost+")"+":"+Is_read);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button_exitClick(TObject *Sender)
{
ServerSocket_applet->Close();
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ServerSocket_appletAccept(TObject *Sender,
TCustomWinSocket *Socket)
{
AnsiString strPrompt="服务器消息:"+Socket->RemoteHost+"加入";
// for(int i=0;i<ServerSocket_applet->Socket->ActiveConnections;i++)
// ServerSocket_applet->Socket->Connections[i]->SendText(strPrompt);
Memo1->Lines->Add(strPrompt);
//StatusBar1->Panels->Items[0]->Text=strPrompt;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString strPrompt1="服务器消息:"+Edit1->Text;
for(int i=0;i<ServerSocket_applet->Socket->ActiveConnections;i++)
ServerSocket_applet->Socket->Connections[i]->SendText(Edit1->Text);
//ServerSocket_applet->Active=false;
//ServerSocket_applet->Port=StrToInt(Edit_port->Text);
//ServerSocket_applet->Active=true;
Memo_data->Lines->Add(strPrompt1);
Edit1->Text="";
}
//---------------------------------------------------------------------------