delphi - Client's udpserver don't response -
my server form has stringgride accept 4 tcp connected user purpose, put udpclient in server , udpserver in clients
in tcp-onconnect event in server form :
//server side has udp client procedure tform1.idtcpserver1connect(athread: tidpeerthread); begin //when fifth user want connect tcpserver //server first ensure @ list 1 of 4 connected user in grid has disconnected //by send udp broadcast 4 user //but in timeout none of these users not respond , although still connected idudpclient1.broadcast('ip', 1718); i:=1 4 begin iplist.add(idudpclient1.receivestring(200);); end; end; //client side has udp server procedure tform1.idudpserver1udpread(sender: tobject; adata: tstream; abinding: tidsockethandle); begin // ip:=getipaddress(); abinding.sendto(abinding.peerip, abinding.peerport, ip[1], length(ip)); end; i run ethereal in client check network , saw udp massage send server client client not respond.
please me what's code problems
your tidudpserver.onudpread event handler not have correct signature, not close. tidudpserver not use tidpeerthread @ all, tidtcpserver does. need more instead:
server:
procedure tform1.idtcpserver1connect(athread: tidpeerthread); begin //when fifth user want connect tcpserver //server first ensure @ list 1 of 4 connected user in grid has disconnected //by send udp broadcast 4 user //but in timeout none of these users not respond , although still connected iplist.clear; idudpserver1.broadcast('ip', 1718); sleep(1000); end; procedure tform1.idudpserver1udpread(sender: tobject; adata: tstream; abinding: tidsockethandle); var s: string; begin if adata.size > 0 begin setlength(s, adata.size); adata.readbuffer(s[1], adata.size); iplist.add(s); end; end; client:
procedure tform1.idudpserver1udpread(sender: tobject; adata: tstream; abinding: tidsockethandle); var s: string; begin if adata.size > 0 begin setlength(s, adata.size); adata.readbuffer(s[1], adata.size); end; if s = 'ip' begin s := abinding.ip; if (s = '') or (s = '0.0.0.0') s := gstack.localaddress; abinding.sendto(abinding.peerip, abinding.peerport, s[1], length(s)); end; end;
Comments
Post a Comment