socket 出错提示!(50分)

  • 主题发起人 主题发起人 cocool00
  • 开始时间 开始时间
C

cocool00

Unregistered / Unconfirmed
GUEST, unregistred user!
一、出现异步出错Asynchronous socket error 10061,该如何解决?
主要是clientsocket连接serversocket的时候弹出的!
二、还有一个溢出的问题list index out of bounds(0)!
出在Memo写好内容按Enter键发送的时候!

刚上手还不是很了解,麻烦高手指教啊!急!小弟第一次上线提问!拜托大家!
 
1 连接失败
clientsocket.active := false;
想避免这个问题的出现,可以自己控制clientsocket的onerror事件

2 DELPHI中有些控制的下标计数器从0开始,有些从1开始,你这里是否出现错误?
 
呵呵,现在10061这个服务器连通问题解决了!
主要还能帮我搞定后面的溢出list out of bound(0)的问题不?
多谢,如果搞定在付另外一半。源码如下:(每次都是发送的时候就要弹出这个)
在memo1的keydown方法中写入如下代码:
procedure TChatForm.Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_Return then
if IsServer then
ServerSocket.Socket.Connections[0].SendText(Memo1.Lines[Memo1.Lines.Count - 1])
else
ClientSocket.Socket.SendText(Memo1.Lines[Memo1.Lines.Count - 1]);
end;
 
这不就是demo->internet->chat中的源码吗?在你的机器上运行出错?
 
啊,是不是啊?就是出现list out of bound(0)的错嘛!
有点烦啊!应该就是发送这一环出了点问题的吧!
每次发送就出问题!我也郁闷那!你们的都通的过?!要不要把所有的代码都贴来看看啊。
 
of course!
在keydown模块中增加:
showmessage(memo1.lines.count);
showmessage(Memo1.Lines[Memo1.Lines.Count - 1]));

或者干脆把所有的代码贴出来吧!
 
这里就是全部的,后面的都比较简单,是基本的,我用来测试测试的!
可是就是发送文字的时候出错!帮我瞧瞧!多谢,晚上我再调试下!郁闷啊。
type
Tchatform = class(TForm)
Memo1: TMemo;
Memo2: TMemo;
MainMenu1: TMainMenu;
listen: TMenuItem;
connect: TMenuItem;
disconnect: TMenuItem;
exit: TMenuItem;
ClientSocket: TClientSocket;
ServerSocket: TServerSocket;
procedure listenClick(Sender: TObject);
procedure connectClick(Sender: TObject);
procedure disconnectClick(Sender: TObject);
procedure exitClick(Sender: TObject);
procedure Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure ServerSocketAccept(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket);
procedure ServerSocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocketClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocketDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;

var
chatform: Tchatform;

implementation
uses ShellAPI;
{$R *.dfm}

procedure Tchatform.listenClick(Sender: TObject);
begin
Listen.Checked := not Listen.Checked;
if Listen.Checked then
begin
ClientSocket.Active := False;
ServerSocket.Active := True;
end
else
begin
if ServerSocket.Active then
ServerSocket.Active := False;
end;
end;

procedure Tchatform.connectClick(Sender: TObject);
Var
server:string;
begin
if ClientSocket.Active then
ClientSocket.Active := False;
if InputQuery('Computer to connect to','Address Name:', Server)
then
if Length(Server) > 0 then
with ClientSocket do
begin
Host := Server;
Active := True;
Listen.Checked := False;
end;
end;

procedure Tchatform.disconnectClick(Sender: TObject);
begin
ClientSocket.Active := False;
ServerSocket.Active := True;
end;

procedure Tchatform.exitClick(Sender: TObject);
begin
ServerSocket.Close;
ClientSocket.Close;
Close;
end;

procedure Tchatform.Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_Return then
if not Serversocket.Active then
ServerSocket.Socket.Connections[0].SendText(Memo1.Lines.Text)
else
ClientSocket.Socket.SendText(Memo1.Lines.Text);
end;

procedure Tchatform.ServerSocketAccept(Sender: TObject;
Socket: TCustomWinSocket);
begin
serversocket.Active := True; //IsServer := True;
end;

procedure Tchatform.ClientSocketRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo2.Lines.Add(Socket.ReceiveText);
end;

procedure Tchatform.ServerSocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo2.Lines.Add(Socket.ReceiveText);
end;

procedure Tchatform.ServerSocketClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo2.Lines.Clear;
end;

procedure Tchatform.ClientSocketDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
ListenClick(nil);
end;

end
 
你的连接失败了,没有连接成功,可能是连接的服务器的IP错了,好好检查你的程序把
 
楼上的就是厉害!PF

TO cocool00:
  这个chat模块需要两个运行版本,一个作为server,一个作为client。
  报的相关错误可能不是MEMO的错误,而是在用socket.connection[0]时出错,因为没
有任何活动的连接。

  先启动一次作为server A,再另外启动该模块 B,在启动时会有一个小错误,不用理会。
在B处选择操作connect,输入IP地址,如果A和B在同一台机器上,可以输入127.0.0.1,
连接成功时在statusbar上会有提示信息:connect to 主机名,此时再进行A和B之间的字
符串发送就应该没问题了。
 
hehe ,楼上的老兄,我明白你的意思!
可是,第一我没有涉及到statusbar的应用;还有就是我是像你所说的打开server和client,
已经是连通了的,就是一往Memo里面写东西,一按ENTER,就出来list out of bound(0).
出现这个就不能往server端发送任何消息,那边也没有反应,现在就一直郁闷出错在哪!
惨啊,看程序也好像没有什么问题,哎!
 
对了,还忘了说!应该是list index out of bound(0).
我想也该是不是这里出错!socket.connection[0]时出错。
但是解决方法怎么弄啊?!还望看看。
 
不捉迷藏啦!
把东东发给我,我来查一下。armyjiang@163.net
 
heihei ...
要得,要得!换到你那里试试,看看情况如何!这样也不错啊。
麻烦发给你。
 
晕......
就在Memo1KeyDown模块中,
if not Serversocket.Active then
改为:
if Serversocket.Active then

判断错误!

不过你真要学这东东的话,demo->internet->chat是个不错的选择。功能类似,但是代码
保证是正确的。
 
嘿嘿!多谢多谢!!!
我会再看看的咯!
 

Similar threads

回复
0
查看
1K
不得闲
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
875
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部