关于SOCKET

yangsl 2003-01-17 05:39:00
我写了个程序
客户端程序为:
#include <vcl.h>
#pragma hdrstop

#include "clientUnit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
ClientSocket1->Open();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
ClientSocket1->Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
ClientSocket1->Socket->SendText(Memo3->Text);
int length,i;
AnsiString ReceiveText,len;
ReceiveText = ClientSocket1->Socket->ReceiveText();
len = ReceiveText.SubString(0,10);
i=0;
while (len.SubString(i,1) != " ")
i = i+1;
len = len.SubString(0,i-1);
length = len.ToInt();
Memo1->Text = ReceiveText.SubString(11,length);
Memo2->Text = ReceiveText.SubString(11+length,ReceiveText.Length());
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ClientSocket1Connect(TObject *Sender,
TCustomWinSocket *Socket)
{
//Memo1->Text = "Connect";
}
//---------------------------------------------------------------------------


服务端程序为:
#include <vcl.h>
#pragma hdrstop

#include "serverUnit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//int sum;
//sum = 0;
AnsiString SendText;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
ServerSocket1->Active = true;
ServerSocket1->Open();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
ServerSocket1->Active = false;
ServerSocket1->Close();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ServerSocket1ClientConnect(TObject *Sender,
TCustomWinSocket *Socket)
{
//sum = sum + 1;

}
//---------------------------------------------------------------------------
void __fastcall TForm1::ServerSocket1ClientDisconnect(TObject *Sender,
TCustomWinSocket *Socket)
{
//sum = sum - 1;
}
//---------------------------------------------------------------------------



void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
int length,i,len;
AnsiString str;
Memo2->Lines->Add(Socket->RemoteHost);
Memo1->Lines->Add(Socket->ReceiveText());
length = Memo1->Text.Length();
str = IntToStr(length);
len = str.Length();
for (i = len;i < 10;i++)
{
str = str + " ";
}
SendText = str + Memo1->Text + Memo2->Text;
Socket->SendText(SendText);
}
//---------------------------------------------------------------------------


void __fastcall TForm1::ServerSocket1ClientError(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
ErrorCode = 0;
}
//---------------------------------------------------------------------------
在调试状态下是可以用的,但编译以后运行就死机,请老手帮忙.
...全文
61 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingfish 2003-01-17
  • 打赏
  • 举报
回复
2个函数改改
void __fastcall TForm1::Button3Click(TObject *Sender)
{
ClientSocket1->Socket->SendText(Memo3->Text);
int length,i;
AnsiString ReceiveText,len;
ReceiveText = ClientSocket1->Socket->ReceiveText();
len = ReceiveText.SubString(1,10);
length = len.ToIntDef(-1);
if(length==-1)return;

Memo1->Text = ReceiveText.SubString(11,length);
Memo2->Text = ReceiveText.SubString(11+length,ReceiveText.Length());
}


void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
int length,i,len;
AnsiString str;
Memo2->Lines->Add(Socket->RemoteHost);
Memo1->Lines->Add(Socket->ReceiveText());
length = Memo1->Text.Length();
str.sprintf("%10d",length);
SendText = str + Memo1->Text + Memo2->Text;
Socket->SendText(SendText);
}
kingfish 2003-01-17
  • 打赏
  • 举报
回复
不是死机,是停在while中了
kingfish 2003-01-17
  • 打赏
  • 举报
回复
会死机?

另外
SubString(index,count) // index从1开始,不是0

yangguo_god 2003-01-17
  • 打赏
  • 举报
回复
你跟踪调试一下
yangguo_god 2003-01-17
  • 打赏
  • 举报
回复
看不出什么问题
meapex 2003-01-17
  • 打赏
  • 举报
回复
你socket设置的是什么模式?nonblocking?如果是这样,最好将ReceiveText = ClientSocket1->Socket->ReceiveText();
这句放到ClientSocket1Read事件里面去。
LuoGD 2003-01-17
  • 打赏
  • 举报
回复
应该没什么大的问题,这是最简单的方式

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧