>>> 2、Win NT 4(sp6)连接win98(server)时 ,winnt不能够连接server。
>一般来说不可能,看看是不是TCP/IP连接, 98的IP地址是不是能够Ping到
绝对能够ping得到win98的机器!
>
>>> 3、win95(client)连接win98(server)时,出现"Windows socket error: (10049),on API 'connect'",不能够联通,反过来可以联通.
>对的, 因为95是winsock 1.1, 而Delphi的那个是要Winsock 2支持的
>可以装一个95下的patch来解决, microsoft上有down的, 或者装97 osr 2
我已经安装了osr2了!
>
>>> 4、当客户端(win98)断开时出现:服务端(win95)出现"Access violation at address 0044391e in module 'project1.exe'。Read of address ffffffff"
>你是不是,没判断socket的状态就去读写数据啦? 每次读只前要判断一下状态的.
>此外, 还可以设置ondisconnect等事件, 或者客户端/服务端断开连接前等待
>一会儿, 让对方有足够的时间收完数据.
你能不能给个例子!!!!
>
>>> 5、当客户端(win98)断开时出现:服务端(win98se)出现"Access violation at address 010c7fff 。Read of address 0108000"
>与4是同样道理. 区别在于winsock是否将TCP/IP的收发窗口distroy掉.
>
>总结: 好好学习TCP/IP socket编程, 看上去你的程序还缺乏足够的可靠性. ^_^
>TCP/IP socket编程中有许多概念是与普通编程不太一样的.
>-----------------------------------------------------------------------------
我想要一个例子,但是很可靠,能不能给呢?
就是A可以发文件到B机,A机断开没有任何问题!OK
我是现炒现买,急用!
我原来的程序代码如下:
procedure TForm1.FormCreate(Sender: TObject);
begin
NickName:='我的昵称';
b_Client:=true;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
ClientSocket1.close;
ServerSocket1.open;
StatusBar1.SimpleText:='开始监听';
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
var s:string;
begin
if Clientsocket1.Active then
ClientSocket1.close;
if InputQuery('连接到计算机','要连接的计算机名称或IP地址:',s) then
if Length(s)>0 then
with ClientSocket1 do
begin
Host:=s;
open;
end;
end;
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
b_Client:=true;
StatusBar1.SimpleText:='连接成功';
end;
procedure TForm1.ServerSocket1Accept(Sender: TObject;
Socket: TCustomWinSocket);
begin
b_Client:=false;
StatusBar1.SimpleText:='连接到'+Socket.RemoteAddress;
end;
procedure TForm1.ClientSocket1Connecting(Sender: TObject;
Socket: TCustomWinSocket);
begin
StatusBar1.SimpleText:='等待来自'+Socket.RemoteAddress+'的连接允许响应...';
end;
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key=VK_Return then
begin
Memo1.Lines.Add(NickName+':'+Edit1.Text);
if b_Client then
ClientSocket1.Socket.SendText(Memo1.Lines[Memo1.lines.Count-1])
else
ServerSocket1.Socket.Connections[0].SendText(Memo1.Lines[Memo1.lines.Count-1]);
end;
对了顺便问一个问题:
在用这个函数RasEditPhonebookEntry时老是出问题,说handle 不对,不知道是怎么回是!
implementation
//function RasCreatePhonebookEntryA
WORD ; external 'Rasapi32.dll';
//function RasEditPhonebookEntryA
WORD ; external 'Rasapi32.dll';
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
dwResult
WORD;
strDialName : string;
begin
//在当前窗口中新建拨号连接
{ dwResult:=RasCreatePhonebookEntryA(handle,'');
if dwResult = 0 then
memo1.lines.add('新建拨号连接成功!')
else
begin
memo1.lines.add('新建拨号连接失败!');
Application.Terminate;
end;
strDialName :='163'; //拨号连接的名称设为163
//在当前窗口中指定修改拨号连接的属性
dwResult:=RasEditPhonebookEntry(Handle,'',PChar(strDialName));
if dwResult = 0 then
memo1.lines.add('修改拨号连接'+strDialName + '成功!')
else
memo1.lines.add('修改拨号连接' + strDialName + '失败!');
strDialName:='163'; //拨号连接的名称设为163
memo1.lines.add( '******************用拨号连接'+ strDialName+'实现拨号上网****************');}
strDialName:='169ess';
winexec(PChar('rundll32.exe rnaui.dll,RnaDial '+strDialName),2);
end;