动态创建TClientSocket出现这个问题,大神赐教一下。

FreedomExpect 2015-08-16 12:53:12
首先是编译不了,不知道为什么出现这个问题。
Access violation at address 04445907C in moudule 'Project1.exe'.Read of address 0000003C.


之前两个都可以编译,但是为什么连接不上,发不了消息,大神帮我看看代码,赐教一下。


Client

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ScktComp;

type
TForm1 = class(TForm)
mmo1: TMemo;
btn1: TButton;
btn2: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure btn2Click(Sender: TObject);
private
FClient: TClientSocket;
procedure OnSocketRead(Sender: TObject; Socket: TCustomWinSocket);
procedure OnSocketConnect(Sender: TObject; Socket: TCustomWinSocket);
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btn2Click(Sender: TObject);
begin
FClient.Host := '127.0.0.1';
FClient.Port := 5200;
FClient.Open;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
FClient := TClientSocket.Create(nil);
FClient.OnRead := OnSocketRead;
FClient.OnConnect := OnSocketConnect;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
FClient.Free;
end;

procedure TForm1.OnSocketRead(Sender: TObject; Socket: TCustomWinSocket);
begin
mmo1.Lines.Add(Socket.ReceiveText);
end;


procedure TForm1.OnSocketConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
Socket.SendText('hello');
end;

end.


server

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ScktComp;

type
TForm1 = class(TForm)
mmo1: TMemo;
btn1: TButton;
srvrsckt1: TServerSocket;

procedure OnSocketConnect(Sender : TObject; Socket : TCustomWinSocket);
procedure OnSocketRead(Sender : TObject; Socket : TCustomWinSocket);
procedure OnSocketWrite(Sender : TObject; Socket : TCustomWinSocket);
procedure btn1Click(Sender: TObject);

end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
begin
if not srvrsckt1.Active then
begin
srvrsckt1.Active := True;
srvrsckt1.Port := 5200;
end;
end;

procedure TForm1.OnSocketConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
Socket.SendText('收到连接请求');
end;

procedure TForm1.OnSocketRead(Sender: TObject; Socket: TCustomWinSocket);
begin
mmo1.Lines.Add(Socket.ReceiveText);
end;

procedure TForm1.OnSocketWrite(Sender: TObject; Socket: TCustomWinSocket);
begin
mmo1.Lines.Add('调用write');
end;

end.
...全文
134 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
FreedomExpect 2015-08-16
  • 打赏
  • 举报
回复
代码没有问题,只是自己犯了脑残错误。

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧