通过TserverSocket和TClientSocket实现TCP/IP通讯,有一个棘手的问题(10分)

  • 主题发起人 主题发起人 青云
  • 开始时间 开始时间

青云

Unregistered / Unconfirmed
GUEST, unregistred user!
//客户端发送数据
procedure Tform1.Button1Click(Sender: TObject);
begin
self.ClientSocket1.Socket.SendText('Hello');
end;


//服务端接收数据
procedure TfrmZh.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
self.Memo1.Lines.Add( Socket.ReceiveText);

end;

但是这里有一个麻烦的问题.因为客户端不一定只有一个,所以我觉得服务端没有办法知道究竟是拿个客户端发数据给他.
所以服务端回复的时候 ,只有给每个客户端都回复.

//服务端发送数据
for i := 0 to serversocket1.Socket.ActiveConnections - 1 do
serversocket1.Socket.Connections.SendText('hello');

所以如果我想实现这样的功能:

某个客户端发数据给服务端,服务端再回复数据给这个客户端,而不是给所有的客户端都回复.
这个问题该如何处理??
 
可以使用Send函数
 
又老又菜的问题,不用丢分了,去搜吧.
 
wlmmlw朋友,多谢您的提醒,能否告诉我几个地址.
 
我现在迫切想知道这个问题,各位兄弟帮忙啊
 
Delphi的Demo里面就有啊,去看看吧
 
zzx_hunter朋友,是哪个demo.我只看到有个chat,而且它好象没有我想要的功能
 
TfrmZh.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
这些参数是干什么用的?是摆设么?呵呵...明白了么?
 
呵呵...不明白.
 
TfrmZh.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
这个Socket就是你要的Socket Socket.SendText就行了
 
Huiz, 我不是说我 不知道服务端如何接受数据.

我是说: 由于服务端只有一个,而客户端可能有很多个。当某个客户端发数据给服务端.
服务端怎么知道是哪个客户端发给它的,并且给该客户端回发数据.而不是给所有的客户端都发数据.
 
TfrmZh.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
这个Socket就是你要的Socket Socket.SendText就行了
=======================================================
不是说得很明白了!这个Socket就是那个发送给你消息的家伙啊:)
 
masm,能否给出相应的代码。我还是不太明白.
 
天哪~~~~
你们就贴点代码出来让他看看吧。
 
在服务器端建一个数组保存连接的客户端信息con_sock:array [0..max]of client_connect
类型定义为:
type
client_connect=record
chandle:integer; //客户端套接字句柄
csocket:tcustomwinsocket; //客户端套接字
.....
end;
//建立连接时在数组中保存连接信息
ServerSocket1ClientConnect(sender:Tobject;Socket:TcustomWinSocket);
var
i:integer;
begin
....//将信息保存在未用的或已经断开的数组节点中
con_sock.chandle:=socket.sockethandle;
con_sock.scocket:=socket;
.....
end;

//收到信息时比较套接字就可以发送给想回的客户端了
ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
i:integer;
begin
...
for i=0 to connetnumber do
if con_sock.chandle=socket.sockethandle then
begin
session.csocket.sendtext('回复...');
end;
...
end;
程序不完整,但思路主要就是将套接字进行比较找到想发送信息的客户端。
 
能不能发送图形呢
 
用sendbuffer发送二进制数据,要什么就是什么!
 
后退
顶部