一个指针的问题
type SockIndex=record
index:integer;
sock:TCustomWinSocket;
pop3:Tpop3;
end;
pSockIndex=^SockIndex;
procedure TFrmMain.POP3SocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
i:integer;
sindex:pSockIndex;
sRec:PChar;
s:string;
begin
s:= socket.ReceiveText;
//根据接收数据的SOCKET来判断属于链表中的指针
for i:=0 to iCount-1 do
begin
sindex:=plist.Items[i];
if socket=sindex.sock then
begin
sindex.pop3.ParseCommand(sRec);
showmessage(inttostr(sindex.index));
end;
end;
pop3.ParseCommand(s);
end;
procedure TFrmMain.POP3SocketAccept(Sender: TObject;
Socket: TCustomWinSocket);
var
sindex:pSockIndex;
index:SockIndex;
pop:Tpop3;
begin
pop:=Tpop3.Create(nil);
pop.SetSock(socket);
pop.popstate:=Init;
pop.QuitFlag:=false;
index.pop3 :=pop;
index.sock :=socket;
index.index :=iCount;
sindex:=@index;
plist.Add(sindex);
iCount:=iCount+1;
end;
问题点数:100、回复次数:11Top
1 楼richardsu(richard)回复于 2002-04-23 11:14:04 得分 0
为什么在READ数据的时候根据socket无法找到对应的链表指针项?
请问各位大虾Top
2 楼hongliqiu(在火中)回复于 2002-04-23 11:15:51 得分 50
能不能说得详细一些?
在那一段出现问题?Top
3 楼maxsuy(魔法兔子)回复于 2002-04-23 11:26:55 得分 30
有难度Top
4 楼Dragon_ZJG(蝈蝈)回复于 2002-04-23 11:32:06 得分 0
针
for i:=0 to iCount-1 do
begin
sindex:=plist.Items[i];
if socket=sindex.sock then
begin
sindex.pop3.ParseCommand(sRec);
showmessage(inttostr(sindex.index));
end;
end;
强制转换一下:pSockIndex(sindex)
Top
5 楼maxsuy(魔法兔子)回复于 2002-04-23 11:59:07 得分 0
仍然不对,
是不是不能用SOCKET来对比是否符合?Top
6 楼torble(阿裕)回复于 2002-04-23 12:08:41 得分 0
试试这样:
for i:=0 to iCount-1 do
begin
sindex:=plist.Items[i];
// 改这里
if socket.Handle = pSockIndex(sindex)^.sock.Handle then
begin
sindex.pop3.ParseCommand(sRec);
showmessage(inttostr(sindex.index));
end;
end;
实际上为了达到目的,定义SockIndex的时候只要存储 Socket 句柄就可以了。Top
7 楼torble(阿裕)回复于 2002-04-23 12:09:29 得分 20
试试这样:
for i:=0 to iCount-1 do
begin
sindex:=plist.Items[i];
// 改这里
if socket.Handle = pSockIndex(sindex)^.sock.Handle then
begin
sindex.pop3.ParseCommand(sRec);
showmessage(inttostr(sindex.index));
end;
end;
实际上为了达到目的,定义SockIndex的时候只要存储 Socket 句柄就可以了。Top
8 楼maxsuy(魔法兔子)回复于 2002-04-23 12:20:10 得分 0
可是socket.handle还是不一样。
我的QQ:525931
可以跟我联系吗Top
9 楼torble(阿裕)回复于 2002-04-23 12:31:33 得分 0
我不用 QQ 的,你调试一下你的程序,看看问题出在哪儿。
先在 sindex:=plist.Items[i]; 这一行设一个断点,然后单步跟踪 Socket.Handle 的值,祝你好运。Top
10 楼maxsuy(魔法兔子)回复于 2002-04-23 12:52:41 得分 0
跟踪了值了
不一样
================================================================
CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!
★ 浏览帖子速度极快![建议系统使用ie5.5以上]。 ★ 多种帖子实现界面。
★ 保存帖子到本地[html格式]★ 监视您关注帖子的回复更新。
★ 可以直接发贴、回复帖子★ 采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录!
★ 支持在线检测程序升级情况,可及时获得程序更新的信息。
★★ 签名 ●
可以在您的每个帖子的后面自动加上一个自己设计的签名哟。
Http://www.ChinaOK.net/csdn/csdn.zip
Http://www.ChinaOK.net/csdn/csdn.rar
Http://www.ChinaOK.net/csdn/csdn.exe [自解压]
Top
11 楼hongliqiu(在火中)回复于 2002-04-27 19:35:07 得分 0
解决了吧,呵呵。Top




