关于非阻塞socket通信的问题,急急急~~

lonelybird818 2007-01-17 05:06:36
环境描述:
tserversocket控件编写服务器端控制软件
采用非阻塞模式与client端进行通信
处理过程大致如下:
在Read事件里接受client发送过来的数据,如果合法则开辟线程,并将该连接的socket与数据一起传递给线程,线程处理完数据后,再通过传递进来的socket发送出去。
问题描述:
当只有一个client连接时,一切都正常。当多个client连接时,只有Read事件里接受到的第一个socket 有效,其他连接都无效了,但是activeconnections还保持有那些连接,发送数据,却怎么也发送不出去。
部分代码:
线程部分:
strcpy(cSendBuff,Trans(cType,cName,cBookInf));
nSendLen=strlen(cSendBuff);
for(int i=0;i<this->Socket->ActiveConnections;i++)
{
if(this->Socket->Connections[i]->RemoteAddress==this->cClientIP)
{
this->Socket->Connections[i]->SendBuf(cSendBuff,nSendLen);
}
}(省略了数据处理的过程)
线程传递的参数:
TThreadSend(TServerWinSocket *pSocket,AnsiString pClientIP,char * pBuff)

请各位老大指点~~急急~~24小时在线等~~~
...全文
448 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sbkopoky 2007-02-17
  • 打赏
  • 举报
回复
有一个香港和悦网络电话的源文件 ,有兴趣妨进入我的BLOG看看
pp616 2007-01-18
  • 打赏
  • 举报
回复
做了个实验 下面是大概的代码
//Unit1.cpp
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
char *buf=(char *)malloc(Socket->ReceiveLength()+1);
memset(buf,0x00,Socket->ReceiveLength()+1);
Socket->ReceiveBuf(buf,Socket->ReceiveLength()+1);
ThreadSend *psend=new ThreadSend(true,Socket,buf);
free(buf);
}

//Uint2.h
#ifndef Unit2H
#define Unit2H
#include <Classes.hpp>
#include <ScktComp.hpp>
class ThreadSend : public TThread
{
private:
const TCustomWinSocket *Sock;
char * Buff;
void __fastcall Execute();
public:
__fastcall ThreadSend(bool CreateSuspended,const TCustomWinSocket * &pSocket,const char * pBuff);
__fastcall ~ThreadSend(){free(Buff);};
};
#endif

//unit2.cpp
#include <vcl.h>
#pragma hdrstop
#include "Unit2.h"
#pragma package(smart_init)
__fastcall ThreadSend::ThreadSend(bool CreateSuspended,const TCustomWinSocket * &pSocket,const char * pBuff)
: TThread(CreateSuspended),Sock(pSocket)
{
Buff=(char *)malloc(strlen(pBuff)+1);
memset(Buff,0x00,strlen(pBuff)+1);
strcpy(Buff,pBuff);
this->FreeOnTerminate=true;
this->Resume();
}
void __fastcall ThreadSend::Execute()
{
Sleep(1000); //1秒后再发回显
int nSendLen=strlen(Buff);
try{
if(Sock->Connected)
Sock->SendBuf(Buff,nSendLen);
}
catch(...){};
}

我模拟了3个client不停的给server发数据回显都很正常。如果楼主在线程里检测连接已断开了那就好好检查代码吧。或许Client端主动断开了。
lonelybird818 2007-01-17
  • 打赏
  • 举报
回复
楼上的大大还在么~~
我按照你的方法修改了下
参数传递方式:
将clientread事件中的socket作为参数传递给线程
线程类里定义了一个TCustomWinSocket *psocket
处理后的发送为:
try{
if(pSocket->Connected)
pSocket->SendBuf(cSendBuff,nSendLen);
}
但是 通过断点发现,每次pSocket->Connected的值都为false,这是怎么回事啊
pp616 2007-01-17
  • 打赏
  • 举报
回复
pSocket 参数为ClientRead事件中的Socket参数
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{

}
pp616 2007-01-17
  • 打赏
  • 举报
回复
TThreadSend(TServerWinSocket *pSocket,AnsiString pClientIP,char * pBuff)
改为
TThreadSend(TCustomWinSocket *pSocket, //直接把对应的Socket指针传如线程
//AnsiString pClientIP, IP可以通过pSocket->RemoteAddress
char * pBuff)
//处理完后发送改为
strcpy(cSendBuff,Trans(cType,cName,cBookInf));
nSendLen=strlen(cSendBuff);
try{
if(pSocket->Connected)
pSocket->SendBuf(cSendBuff,nSendLen);
}

内容概要:LTK8319是一款单通道H桥有刷直流电机驱动器,工作电压范围为2.5V至12V,支持最高3.9A的峰值电流和2.5A的平均电流驱动能力,适用于小家电、玩具、电子锁、机器人等小型电动设备。该芯片通过两个逻辑输入(INA和INB)控制电机的正转、反转、停止与刹车,并支持PWM调速控制。集成欠压锁定(UVLO)、过温保护(TSD)及自动故障恢复功能,确保系统安全可靠运行。当INA和INB持续为低电平时,芯片进入低功耗休眠模式,显著降低静态功耗。采用ESOP-8封装,符合环保无铅标准。; 适合人群:电子工程师、嵌入式系统开发者、电机控制技术人员,以及从事小型机电产品研发的设计人员;具备基本电路知识和电机控制经验者更佳。; 使用场景及目标:①用于驱动小型有刷直流电机或步进电机的一个绕组,实现精确的方向与速度控制;②适用于电池供电设备中对功耗敏感的应用,利用休眠模式延长续航时间;③在电机启停频繁、负载波动大的场合,发挥其电流控制与保护机制优势,提升系统稳定性。; 阅读建议:此文档提供了详细的电气特性、功能逻辑表、保护机制与时序参数,建议结合典型应用电路进行硬件设计,并重点关注电源去耦电容选型、散热布局及PWM频率设置(不超过100kHz),以确保系统可靠运行。
内容概要:本文研究了一种基于遗传算法(GA)与粒子群优化算法(PSO)融合的无人机三维路径规划方法,旨在解决复杂环境中无人机避障与路径优化的问题。通过构建三维空间环境模型,提出一种结合GA全局搜索能力强与PSO收敛速度快优势的混合优化策略,并利用Matlab平台完成算法仿真与路径可视化。研究不仅实现了无人机在存在多个障碍物场景下的安全、高效飞行路径规划,还对GA与PSO两种算法在路径长度、计算耗时、收敛稳定性等方面进行了对比分析,评估其性能差异,为实际应用中算法选型提供依据。; 适合人群:具备一定算法设计基础和Matlab编程能力的科研人员、自动化与人工智能方向的研究生,以及从事无人机导航、智能控制等相关领域的工程技术人员。; 使用场景及目标:①应用于城市密集建筑区、山地森林等复杂地形中的无人机自主巡检与应救援任务;②为智能交通、地理测绘、灾害监测等需要自主路径决策的无人系统提供算法支持与仿真验证;③通过对比不同智能优化算法的表现,辅助研究人员在特定应用场景下选择最优路径规划方案。; 阅读建议:建议读者结合提供的Matlab代码进行仿真实验,调整种群规模、迭代次数、障碍物分布等参数,深入理解算法运行机制与性能表现,并可进一步拓展至动态环境更新、多无人机协同避障等更复杂的研究方向。

1,317

社区成员

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

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