社区
网络及通讯开发
帖子详情
socket组件数据收发问题
zhyuanbaron
2004-05-07 07:46:08
我用Timer组件编一个定时发送数据的程序,在每次服务器端接收之后回传相同的数据,但是客户端只能读到第一个回传数据,其他的都不经过read函数,这是为什么阿?
是Client还是Server的事啊???
...全文
102
12
打赏
收藏
socket组件数据收发问题
我用Timer组件编一个定时发送数据的程序,在每次服务器端接收之后回传相同的数据,但是客户端只能读到第一个回传数据,其他的都不经过read函数,这是为什么阿? 是Client还是Server的事啊???
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
庄鱼
2004-05-14
打赏
举报
回复
很想帮忙,可是缺乏环境,只能从语法上分析了。
void __fastcall TTransForm::ServerSocketClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
if(IsServer)
{
ServerSocket->Socket->Connections[0]->SendText(s1);
}
}
//----------- 上述函数你想做什么?
void __fastcall TTransForm::ServerSocketClientDisconnect(TObject *Sender,
TCustomWinSocket *Socket)
{
StatusBar1->Panels->Items[0]->Text = "Listening...";
}
//----------- 你是在制造错觉吗?
void __fastcall TTransForm::FormCreate(TObject *Sender)
{
MyList = new TStringList();
int i;
s1=new char[50*1024];
s2="a";
s1[0]='\0';
for(i=1;i<=50*1024;i++) //指针溢出 for(i=1;i<51199;i++)//不要让计算机老是计算
{
s1=strcat(s1,s2);
//-------------------- 这里要干吗?
}
s1[i]=0;
}
//-------------------- 本函数溢出了
void __fastcall TTransForm::ClientSocketRead(TObject *Sender,
TCustomWinSocket *Socket)
{
GetSystemTime(×2); // ????
//============= TDateTime time2= Now();
String sTemp=""; //------- 不确定空间存储
char SUB[20];
WORD sub;
sub=(((times2.wHour - times1.wHour) * 60 + (times2.wMinute - times1.wMinute)) * 60 +(times2.wSecond - times1.wSecond)) * 1000 + times2.wMilliseconds - times1.wMilliseconds;
sub=sub/2;
//============ sub = time2.Int()/2;
ltoa(sub,SUB,10);
sTemp=sTemp+"延时"+SUB+"毫秒";
//============ char *str = new char[30];
//============ AnsiString tmp = AnsiString(str); tmp.sprintf("延时%d毫秒",sub);
// Memo2->Lines->Add(Socket->ReceiveText());
Memo2->Lines->Add(sTemp);
MyList->Add(sTemp);
//============ Memo2->Lines->Append(tmp);MyList->Add(new AnsiString(tmp));
/*
AnsiString time2;
char *time3;
time2=TimeToStr(Time());
time3=time2.c_str();
// s1=strcat(s1,time3);
Memo2->Lines->Add(time3);
*/
}
//------------------- 怪怪的用法!
void __fastcall TTransForm::SendMessageClick(TObject *Sender)
{
int i;
Timer1->Interval=200;
// Timer1->Enabled=true;
for(i=0;i<5;i++)
{
GetSystemTime(×1);
ClientSocket->Socket->SendText(s1);
// Sleep(300);
}
}
//---------------- 到底想做什么?
程序脉络清晰不仅仅是风格问题,在很大程度上能帮助自己知道在做什么,如何避免错误。但是在这个程序里,过多的全局变量使得程序变得很晦涩,难以理解。
yesry
2004-05-13
打赏
举报
回复
IsServer是什么?
csym
2004-05-11
打赏
举报
回复
tcp发包得时候可能会把你几次发得包组合在一起,也就是说你受到的包其实是几个包
zhyuanbaron
2004-05-08
打赏
举报
回复
恳请各位大虾帮忙啊,要多少分只管说,小弟感激不尽!!!
zhyuanbaron
2004-05-08
打赏
举报
回复
客户端程序
//------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "main.h"
//---------------------------------------------------------------------------
#pragma link "ScktComp"
#pragma resource "*.dfm"
TTransForm *TransForm;
//---------------------------------------------------------------------------
__fastcall TTransForm::TTransForm(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TTransForm::FileConnectItemClick(TObject *Sender)
{
if (ClientSocket->Active)
{
ClientSocket->Active = false;
}
if (InputQuery("Computer to connect to", "Address Name:", Server))
{
if (Server.Length() > 0)
{
ClientSocket->Host = Server;
ClientSocket->Active = true;
FileListenItem->Checked = false;
}
}
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TTransForm::Exit1Click(TObject *Sender)
{
delete []s1;
delete MyList;
ClientSocket->Close();
Close();
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TTransForm::FormCreate(TObject *Sender)
{
MyList = new TStringList();
int i;
s1=new char[50*1024];
s2="a";
s1[0]='\0';
for(i=1;i<=50*1024;i++)
{
s1=strcat(s1,s2);
}
s1[i]=0;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TTransForm::ClientSocketConnect(TObject *Sender,
TCustomWinSocket *Socket)
{
StatusBar1->Panels->Items[0]->Text = "Connect to: " + Socket->RemoteHost;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TTransForm::Disconnect1Click(TObject *Sender)
{
ClientSocket->Active = false;
StatusBar1->Panels->Items[0]->Text = "Listening...";
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TTransForm::ClientSocketRead(TObject *Sender,
TCustomWinSocket *Socket)
{
GetSystemTime(×2);
String sTemp="";
char SUB[20];
WORD sub;
sub=(((times2.wHour - times1.wHour) * 60 + (times2.wMinute - times1.wMinute)) * 60 +(times2.wSecond - times1.wSecond)) * 1000 + times2.wMilliseconds - times1.wMilliseconds;
sub=sub/2;
ltoa(sub,SUB,10);
sTemp=sTemp+"延时"+SUB+"毫秒";
// Memo2->Lines->Add(Socket->ReceiveText());
Memo2->Lines->Add(sTemp);
MyList->Add(sTemp);
/*
AnsiString time2;
char *time3;
time2=TimeToStr(Time());
time3=time2.c_str();
// s1=strcat(s1,time3);
Memo2->Lines->Add(time3);
*/
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TTransForm::ClientSocketError(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
Memo2->Lines->Add("Error connecting to:" + Server);
ErrorCode = 0;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TTransForm::SendMessageClick(TObject *Sender)
{
int i;
Timer1->Interval=200;
// Timer1->Enabled=true;
for(i=0;i<5;i++)
{
GetSystemTime(×1);
ClientSocket->Socket->SendText(s1);
// Sleep(300);
}
}
//---------------------------------------------------------------------------
void __fastcall TTransForm::DisplayClick(TObject *Sender)
{
Memo2->Lines->AddStrings(MyList);
}
//---------------------------------------------------------------------------
void __fastcall TTransForm::Timer1Timer(TObject *Sender)
{
GetSystemTime(×1);
ClientSocket->Socket->SendText(s1);
//Memo2->Lines->AddStrings(MyList);
}
//---------------------------------------------------------------------------
zhyuanbaron
2004-05-08
打赏
举报
回复
服务器端程序
//------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "main.h"
//---------------------------------------------------------------------------
#pragma link "ScktComp"
#pragma resource "*.dfm"
TTransForm *TransForm;
//---------------------------------------------------------------------------
__fastcall TTransForm::TTransForm(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TTransForm::FileListenItemClick(TObject *Sender)
{
FileListenItem->Checked = !FileListenItem->Checked;
if (FileListenItem->Checked)
{
ClientSocket->Active = false;
ServerSocket->Active = true;
StatusBar1->Panels->Items[0]->Text = "Listening...";
}else
{
if (ServerSocket->Active)
{
ServerSocket->Active = false;
}
StatusBar1->Panels->Items[0]->Text = "";
}
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TTransForm::Exit1Click(TObject *Sender)
{
delete []s1;
ServerSocket->Close();
ClientSocket->Close();
Close();
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TTransForm::FormCreate(TObject *Sender)
{
FileListenItemClick(NULL);
int i;
s1=new char[50*1024];
s2="a";
s1[0]='\0';
for(i=1;i<=50*1024;i++)
{
s1=strcat(s1,s2);
}
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TTransForm::Disconnect1Click(TObject *Sender)
{
ClientSocket->Active = false;
ServerSocket->Active = true;
StatusBar1->Panels->Items[0]->Text = "Listening...";
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TTransForm::ServerSocketClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
if(IsServer)
{
ServerSocket->Socket->Connections[0]->SendText(s1);
}
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TTransForm::ServerSocketAccept(TObject *Sender,
TCustomWinSocket *Socket)
{
IsServer = true;
StatusBar1->Panels->Items[0]->Text = "Connect to: " + Socket->RemoteAddress;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TTransForm::ServerSocketClientConnect(TObject *Sender,
TCustomWinSocket *Socket)
{
Memo2->Lines->Clear();
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TTransForm::ServerSocketClientDisconnect(TObject *Sender,
TCustomWinSocket *Socket)
{
StatusBar1->Panels->Items[0]->Text = "Listening...";
}
//---------------------------------------------------------------------------
庄鱼
2004-05-08
打赏
举报
回复
把你的程序贴出来,看看是不是socket的read方法出了问题。
zhyuanbaron
2004-05-08
打赏
举报
回复
我把timer去掉,用循环来做这个程序,还是一样的!楼上说socket被关掉是怎么回事啊?初始化又要注意什么问题啊?
pp616
2004-05-07
打赏
举报
回复
看看代码啊。
叶子哟
2004-05-07
打赏
举报
回复
代码?
是长连接,还是一边一断呀!注意初始化的问题
llin998
2004-05-07
打赏
举报
回复
你好好检查一下程序,一定是一个非常简单的错误,你检查一下是不是timer只触发一次就被关掉了,还是socket被关掉了,一定是一个非常愚蠢的错误!
yayowd
2004-05-07
打赏
举报
回复
看看是不是时间间隔设置的太短了啊
这么简单的过程应该不会有问题啊??
HP
Socket
C++控制台版DEMO.rar
一个开源的高性能IOCP(完成端口)网络通信封装框架《HP-
Socket
》的使用实例,官方的DEMO只有MFC对话框的版本,对于刚接触这个框架的新手不太容易把代码移植到自己的项目。 此DEMO使用标准C++控制台来实现,对于刚接触网络编程的新手来说可以更容易跟踪理解 HP-
Socket
组件
的工作流程,从而快速移植到自己的项目中。 此DEMO采用PACK模型,包含服务器及客户端的实现。PACK模型可以让你不用考虑
数据
的分包组包,也不用担心粘包及解包,
数据
收发
的一切工作都由HP
Socket
框架
组件
来完成,让你可以专注于自己的业务逻辑。 此DEMO采用VS2019编译,如果你版本低于2019,请修改项目属性->常规 里两个地方就可以正常编译: 1.修改一下“Windows SDK 版本”为你已安装的WINDOWS SDK版本。 2.修改“平台工具集”为你当前正在使用的VS的版本 HP
Socket
官网:https://www.oschina.net/p/hp-
socket
HP
Socket
控制台版DEMO.7z
一个开源的高性能IOCP(完成端口)网络通信封装框架《HP-
Socket
》的使用实例,官方的DEMO只有MFC对话框的版本,对于刚接触这个框架的新手不太容易把代码移植到自己的项目。 此DEMO使用标准C++控制台来实现,对于刚接触网络编程的新手来说可以更容易跟踪理解 HP-
Socket
组件
的工作流程,从而快速移植到自己的项目中。 此DEMO采用PACK模型,包含服务器及客户端的实现。PACK模型可以让你不用考虑
数据
的分包组包,也不用担心粘包及解包,
数据
收发
的一切工作都由HP
Socket
框架
组件
来完成,让你可以专注于自己的业务逻辑。 此DEMO采用VS2019编译,解压后1.8G
Socket
编程快速入门
本课程将理本课程将理啊 论结合实践,带你从零开始,系统学习
Socket
编程技术,让
Socket
的学习不再那么零散与难以掌握,同时会提炼出
Socket
网络传输的核心思想与构架,并带你踩坑出坑,增加你的分析与处理
问题
的啊aas...
uniapp封装web
socket
,使用简单,下载即可使用,统一使用json
收发
消息,区分业务类型
uniapp封装web
socket
,使用简单,下载复制进项目即可使用,统一使用json
收发
消息,区分业务类型。 1、使用方法,在需要使用的页面导入改文件(也可以挂载全局) 2、onLoad方法调用this.
socket
Obj = new Web
Socket
IO(参数) this.
socket
Obj.connect
Socket
Init() 3、接收服务端
数据
监听uni.$on("
socket
Msg", (res) => {}) 4、发送成功监听:uni.$on("sendSuccess", () => { })
delphi7 使用
socket
实现web
socket
delphi7写应用程序作为服务端。delphi7安装web
socket
组件
太麻烦了,还收费。既然web
socket
也是一个
socket
,那自己解析web
socket
就可以了。我只实现了握手,
数据
帧的简单解析。可以进行除汉字外的简单
收发
。如果你应用不是太深的话没
问题
的。若是深的话估计这些简单的你都会。。。。
网络及通讯开发
1,316
社区成员
8,873
社区内容
发帖
与我相关
我的任务
网络及通讯开发
C++ Builder 网络及通讯开发
复制链接
扫一扫
分享
社区描述
C++ Builder 网络及通讯开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章