服务器,客户端的SOCKET通讯问题

syq00004444 2007-07-17 12:37:34
CB服务器采用线程阻塞(stThreadBlocking)的方式与客户端连接,当有一个客户端连接到服务器就分配一个线程来处理,但是程序中有一段程序采用了多线程保护(设置临界区),也就是说同一时刻只有一个客户端能通过这段程序,而其他客户端运行到这段程序时只能等待,代码如下:
//进入临界区
EnterCriticalSection(&CommunicationSync);
int i=0;
while(i<2)
{
//读取应用程序写到共享文件的数据的动态内存
char *AppData;
//接收客户端申请的动态内存
char *ClientData;
//绘图数据的长度
int DataLength;
int iFileHandle1;
//申请动态内存,接受客户端传来的申请信息,长度在10个字符以内
ClientData=new char[10];

//接受客户端传来申请
ClientSocket->ReceiveBuf(ClientData,10);
//name[i]="d:\\gx\\data\\申请 data"+IntToStr(i)+".Dat";
//创建文件夹
iFileHandle1 = FileCreate("d:\\gx\\data\\申请 data1.Dat");
//将客户端传来的申请写入文件夹
FileWrite(iFileHandle1,ClientData,10);
//释放动态内存
delete[] ClientData;
FileClose(iFileHandle1);
//服务器程序发出申请以后,应用程序每隔一秒检查一次申请文件
Sleep(900);
//LeaveCriticalSection(&CommunicationSync);

int iFileHandle;
//打开二进制文件只读
if((iFileHandle = FileOpen("d:\\gx\\data\\wavedata1.Dat", fmOpenRead))!=-1)
{
//iFileHandle = FileOpen("d:\\gx\\data\\wavedata1.Dat", fmOpenRead);
//获得二进制文件的大小,以字节表示
DataLength=FileSeek(iFileHandle,0,2);
FileSeek(iFileHandle,0,0);
//申请动态内存
AppData=new char[DataLength+1];
FileRead(iFileHandle, AppData, DataLength);
FileClose(iFileHandle);
DeleteFile("d:\\gx\\data\\wavedata1.Dat");
//发送客户端需要的数据
ClientSocket->SendBuf(AppData,DataLength);
//释放动态内存
delete[] AppData;
//协调程序进程
Sleep(1800);
}
i++;
}
//退出临界区
LeaveCriticalSection(&CommunicationSync);
现在的问题是如果不做任何处理,其他客户端运行到上面这段程序时,会等待吗
...全文
170 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
LuoGD 2007-07-18
  • 打赏
  • 举报
回复
会的
daihongzhi001 2007-07-18
  • 打赏
  • 举报
回复
syq00004444 2007-07-17
  • 打赏
  • 举报
回复
还有一个问题就是如果服务器没有及时读取客户端的发出的数据,数据会存放在哪里,等服务器来处理时还能正确读取吗

1,317

社区成员

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

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