DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: maple909
今日帖子: 10
在线用户: 12
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 ylp9802 (ylp9802) ★☆☆☆☆ -
普通会员
2004/3/27 21:48:06
标题:
利用多线程进行数据传输,出错???? 浏览:1304
加入我的收藏
楼主: 各位老大,利用clientsocket和seversocket做数据传输,client端采用阻塞,server端stThreadBlocking  一对一传输是正常的,但是我一打开多个client同时向sever端发送数据时,就出错了,望各位老大,指点一下!!以下是我源代码:

private
thr:tserverclientwinsocket;
        //serversockitconnection : TCustomWinSocket;
var
  myt:TClientThread;
procedure Tfrmsever.ServerSocketGetThread(Sender: TObject;  ClientSocket: TServerClientWinSocket;  var SocketThread: TServerClientThread);
  var
      i :integer;
begin
myt:= TClientThread.Create(false, ClientSocket);
 myt.thr:=clientsocket;
 socketthread:=myt;
 //i:=serversocket.Socket.ActiveThreads;
 //myt.serversockitconnection:=serversocket.Socket.Connections[i-1];
end;

Procedure TClientThread.ClientExecute;
Var
  ReceiveBuffer : Array[0..299] Of Char;
  SocketStream : TWinSocketStream;
  BytesRead ,j: Integer;
Begin
 While Not Terminated And ClientSocket.Connected Do
  Begin
   try
     SocketStream := TWinSocketStream.Create(ClientSocket, 60000);
     try
       FillChar(ReceiveBuffer, 10, 0);
       If SocketStream.WaitForData(5000) Then
        begin
         Repeat
          BytesRead := SocketStream.Read(ReceiveBuffer,SizeOf(ReceiveBuffer));
          if BytesRead = 0 then
            ClientSocket.Close
          Else
           begin
            mystream.WriteBuffer(ReceiveBuffer, BytesRead);
                      end;
        Until  Not SocketStream.WaitForData(2000);
       end;
     finally
       SocketStream.Free;
       ClientSocket.Close;
       mystream.clear;
     end;
   except
    HandleException;
   end;
  End;
End;

----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行78.125毫秒 RSS