头疼3天,十万火急!关于serversocket 和clientsocket 网络连接问题,在线等待两个小时
头疼3天,十万火急!关于serversocket 和clientsocket 网络连接问题,在线等待两个小时
楼主wxjh(农民)2002-07-21 19:47:32 在 Delphi / 网络通信/分布式开发 提问 这几天在编写网络记费软件过程中,我使用的是
serversocket 和clientsocket控件 ,用serversocket作为管理端,clientsocket 作为用户端,当使用clientsocket向servesocket发送消息时,老是弹出对话框,"list index out bounts(1),请教各位高手,是什么原因,而且,在服务器端上已经能够看到客户端的ip地址,但是客户端上还是显示"正在连接",过一会儿,就会自动的关闭连接, 问题点数:100、回复次数:7Top
1 楼johnsonrao(johnson)回复于 2002-07-21 19:54:43 得分 30
数组定义的边界错误,好好查一查程序
一般数组从0到count-1,如果你用了count就出错了Top
2 楼flinming(flinming)回复于 2002-07-21 19:58:23 得分 30
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls, ScktComp, ExtCtrls, ComCtrls;
type
TForm1 = class(TForm)
ClientSocket1: TClientSocket;
ServerSocket1: TServerSocket;
MainMenu1: TMainMenu;
File1: TMenuItem;
listen1: TMenuItem;
connect1: TMenuItem;
StatusBar1: TStatusBar;
Memo2: TMemo;
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure listen1Click(Sender: TObject);
procedure connect1Click(Sender: TObject);
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1Accept(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Memo2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
server:string;
isserver:boolean;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
listen1click(nil);
end;
procedure TForm1.listen1Click(Sender: TObject);
begin
memo1.Lines.Clear;
memo2.Lines.Clear;
listen1.Checked:=not listen1.Checked;
if listen1.Checked then
begin
clientsocket1.Active:=false;
serversocket1.Active:=true;
statusbar1.Panels.Text:="listening......";
end
else
begin
if serversocket1.Active then
serversocket1.Active:=false;
clientsocket1.Active:=true;
statusbar1.Panels.Text:="";
end;
end;
procedure TForm1.connect1Click(Sender: TObject);
begin
if clientsocket1.Active then
clientsocket1.Active:=false;
if inputquery("computer to connect to ","address name:",server) then
if length(server)>0 then
with clientsocket1 do
begin
host:=server;
active:=true;
end;
end;
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
statusbar1.Panels.Text:="connected to"+socket.RemoteHost;
end;
procedure TForm1.ServerSocket1Accept(Sender: TObject;
Socket: TCustomWinSocket);
begin
isserver:=true;
statusbar1.Panels.Text:="connected to"+socket.RemoteAddress;
end;
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
memo2.Lines.Add(socket.receivetext)
end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
memo1.Lines.Add(socket.ReceiveText);
end;
procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
memo2.Lines.Add("error connecting to: "+server);
errorcode:=0;
end;
procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=VK_return then
begin
if isserver then
serversocket1.socket.connections.sendtext(memo1.lines)
end;
end;
procedure TForm1.Memo2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=VK_return then
begin
if isserver then
clientsocket1.Socket.SendText(memo2.Lines);
end;
end;
end.
Top
3 楼wxjh(农民)回复于 2002-07-21 20:00:51 得分 0
但是我没有使用count也没有使用书组Top
4 楼wxjh(农民)回复于 2002-07-21 20:02:52 得分 0
而且我的客户端和服务器端是两个工程Top
5 楼wxjh(农民)回复于 2002-07-21 20:04:18 得分 0
johnsonrao : flinming(明仔) 两位大哥,有没有qq号码:我的是53997882
我想好好的交流一下Top
6 楼johnsonrao(johnson)回复于 2002-07-21 20:08:27 得分 0
memo1.clear;
memo2.clear;
memo1.lines
memo2.lines
如果memo1或memo2没有加过一行就会出错
clear后count为0,memo1.lines.count-1为-1当然就出错了!Top
7 楼johnsonrao(johnson)回复于 2002-07-21 20:11:19 得分 40
在引用memo1.lines.count-1前要判断Count是否为0Top
-
相关文章
2秒记住本站域名
玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的ReadyGo.com.cn
