📄 wzjh35.htm
字号:
<html>
<head>
<style type="text/css"><!--
.p9 { font-family: "宋体"; font-size: 9pt}a {text-transform: none; text-decoration: none;}
a:hover {text-decoration: underline; color: #FF0000;}
--></style>
<title>网络和通讯编程</title>
</head>
<body>
<h3 align="center"><font color="#FF0000">网络和通讯编程</font></h3>
<table width="100%">
<tr>
<td><font color="0000FF"><a name="1">打开拨号连接</a></font></td>
</tr>
<tr>
<td> 调用拨号网络里的拨号程序来连接:其中'连接Internet'为你创建的拨号程序名称<br>
winexec('rundll32.exe rnaui.dll,RnaDial '+'连接Internet',9);<br>
</td>
</tr>
<tr>
<td><font color="0000FF"><a name="2">一个串口通讯的问题? </a></font></td>
</tr>
<tr>
<td>Serial Port Communications?<br>
问<br>
I want to build a simple electrical controller which receives input from a<br>
sensor through a comm port and either turns a power source(s) on or off<br>
based upon this signal. I want this controller to be software in nature.<br>
How do I communicate through the port and is it possible to discern changes<br>
in voltage.<br>
If not, what kind of signal must be input.<br>
答<br>
When you want to write and read only binary signals you can use the printer<br>
parallel port. For that purpose the Port command is useful. In the below an<br>
example of some D1 code used for bidirectional 2 wire bus communication (I2C).<br>
BaseAddress is $278, $378 or $3BC, depending on the LPT port used for<br>
communication.<br>
There is a 'but'. In D1 the port function was available but not documented. In<br>
D2 and D3 it seems to have disappeared entirely (Please somebody correct me if<br>
this is wrong).<br>
We are using the parallel printer port with attached a small interface card<br>
with some I/O buffering for control of RF modules. Could somebody indicate<br>
whether the Port function still exist or what the alternative could be ?<br>
regards,<br>
Hans Brekelmans<br>
PROCEDURE SetIICline(Terminal: IICterminalTypes; High: Boolean);<br>
Var Count : Word;<br>
CtrlAddress: word;<br>
Begin { set iic line }<br>
CtrlAddress:=BaseAddress+2;<br>
Case Terminal of<br>
SCL : if High then Port[CtrlAddress]:=$08 else
Port[CtrlAddress]:=$00;<br>
SDA : if NOT High then Port[BaseAddress]:=$80 else
Port[BaseAddress]:=$00;<br>
END;<br>
For Count := 1 to ClockDelay do;<br>
End; {SetIICline}<br>
FUNCTION GetIICline(Terminal: IICterminalTypes): Boolean;<br>
const SDA_IN=$80; { SDA: 25 pin #11, status, NOT BUSY, bit 7 }<br>
SCL_IN=$08; { SCL: 25 pin #15,
status, NOT Error, bit 3 }<br>
var Count : Word;<br>
ReadAddress: word;<br>
Begin<br>
ReadAddress:=BaseAddress+1;<br>
CASE Terminal OF<br>
SCL: GetIICline:=((Port[ReadAddress] AND SCL_IN) = SCL_IN);<br>
SDA: GetIICline:=((Port[ReadAddress] AND SDA_IN) = SDA_IN);
{ read sda<br>
pin }<br>
END;<br>
For Count := 1 to ClockDelay do;<br>
End;<br>
</td>
</tr>
<tr>
<td><font color="0000FF"><a name="3">得到本机IP地址? </a></font></td>
</tr>
<tr>
<td>How about using winsockets?<br>
This code is untested and ugly.<br>
program get_ip;<br>
uses<br>
winsock,sysutils;<br>
VAR<br>
ch : ARRAY[1..32] OF Char;<br>
i : Integer;<br>
WSData: TWSAData;<br>
MyHost: PHostEnt;<br>
begin<br>
IF WSAstartup(2,wsdata)<>0 THEN<br>
BEGIN<br>
Writeln('can''t start Winsock: Error
',WSAGetLastError);<br>
Halt(2);<br>
END;<br>
try<br>
IF getHostName(@ch[1],32)<>0 THEN<br>
BEGIN<br>
Writeln('getHostName failed');<br>
Halt(3);<br>
END;<br>
except<br>
Writeln('getHostName failed');<br>
halt(3);<br>
end;<br>
MyHost:=GetHostByName(@ch[1]);<br>
IF MyHost=NIL THEN<br>
BEGIN<br>
Writeln(GetHostName('+StrPas(@ch[1])+') failed : Error<br>
'+IntToStr(WSAGetLastError));<br>
Halt(4);<br>
END<br>
ELSE<br>
BEGIN<br>
Write('address ');<br>
FOR i:=1 TO 4 DO<br>
BEGIN<br>
Write(Ord(MyHost.h_addr^[i-1]));<br>
IF i<4 THEN<Br>
write('.')<br>
ELSE<br>
writeln;<br>
END;<br>
END;<br>
end.<br>
</td>
</tr>
<tr>
<td><font color="0000FF"><a name="4">任何动态改变/添加网络设置中的 TCP/IP
的 DNS 地址</a></font></td>
</tr>
<tr>
<td>例如,把 DNS Server的地址添加为192.0.0.1和192.1.1.0,可调用:<br>
SetTCPIPDNSAddresses('192.0.0.1 192.1.1.0') ;<br>
// 各地址之间用一个空格隔开<br>
1. SetTCPIPDNSAddresses 定义如下:<br>
procedure SetTCPIPDNSAddresses( sIPs : string );<br>
begin<br>
//<br>
// if using Windows NT<br>
//<br>
SaveStringToRegistry_LOCAL_MACHINE(<br>
'SYSTEM\CurrentControlSet' +<br>
'\Services\Tcpip\Parameters',<br>
'NameServer',<br>
sIPs );<br>
//<br>
// if using Windows 95<br>
//<br>
SaveStringToRegistry_LOCAL_MACHINE(<br>
'SYSTEM\CurrentControlSet' +<br>
'\Services\VxD\MSTCP',<br>
'NameServer',<br>
sIPs );<br>
end;<br>
2. 其中 SaveStringToRegistry_LOCAL_MACHINE 定义:<br>
uses Registry;<br>
procedure SaveStringToRegistry_LOCAL_MACHINE(<br>
sKey, sItem, sVal : string );<br>
var<br>
reg : TRegIniFile;<br>
begin<br>
reg := TRegIniFile.Create( '' );<br>
reg.RootKey := HKEY_LOCAL_MACHINE;<br>
reg.WriteString( sKey, sItem, sVal + #0 );<br>
reg.Free;<br>
end;<br>
</td>
</tr>
<tr>
<td><font color="0000FF"><a name="5">如何在程序中动态取得Win95/98的网络邻居中的工作组及计算机名?</a></font></td>
</tr>
<tr>
<td>可参考下面代码,或许有所帮助:<br>
procedure GetDomainList(TV:TTreeView);<br>
var<br>
a : Integer;<br>
ErrCode : Integer;<br>
NetRes : Array[0..1023] of TNetResource;<br>
EnumHandle : THandle;<br>
EnumEntries : DWord;<br>
BufferSize : DWord;<br>
s : string;<br>
itm : TTreeNode;<br>
begin<br>
{ Start here }<br>
try<br>
With NetRes[0] do begin<br>
dwScope :=RESOURCE_GLOBALNET;<br>
dwType :=RESOURCETYPE_ANY;<br>
dwDisplayType :=RESOURCEDISPLAYTYPE_DOMAIN;<br>
dwUsage :=RESOURCEUSAGE_CONTAINER;<br>
lpLocalName :=NIL;<br>
lpRemoteName :=NIL;<br>
lpComment :=NIL;<br>
lpProvider :=NIL;<br>
end;<br>
{ get net root }<br>
ErrCode:=WNetOpenEnum(<br>
RESOURCE_GLOBALNET,<br>
RESOURCETYPE_ANY,<br>
RESOURCEUSAGE_CONTAINER,<br>
@NetRes[0],<br>
EnumHandle<br>
);<br>
If ErrCode=NO_ERROR then begin<br>
EnumEntries:=1;<br>
BufferSize:=SizeOf(NetRes);<br>
ErrCode:=WNetEnumResource(<br>
EnumHandle,<br>
EnumEntries,<br>
@NetRes[0],<br>
BufferSize<br>
);<br>
WNetCloseEnum(EnumHandle);<br>
ErrCode:=WNetOpenEnum(<br>
RESOURCE_GLOBALNET,<br>
RESOURCETYPE_ANY,<br>
RESOURCEUSAGE_CONTAINER,<br>
@NetRes[0],<br>
EnumHandle<br>
);<br>
EnumEntries:=1024;<br>
BufferSize:=SizeOf(NetRes);<br>
ErrCode:=WNetEnumResource(<br>
EnumHandle,<br>
EnumEntries,<br>
@NetRes[0],<br>
BufferSize<br>
);<br>
IF ErrCode=No_Error then with TV do try<br>
a:=0;<br>
Items.BeginUpDate;<br>
Items.Clear;<br>
Itm:=Items.Add(TV.Selected,string(NetRes[0].lpProvider));<br>
Itm.ImageIndex:=0;<br>
Itm.SelectedIndex:=0;<br>
{ get domains }<br>
下面的一个单元定义了一个组件. TNetworkBrowser, 可以枚举hierachical树上所有<br>
的网络资源. 实际上浏览是要花费很长时间的,这您可以通过在WINDOWS资源管理器<br>
中打开"整个网络" 来比较一下. 如果你设置SCOPE属性 为nsContext
, 你就可以看到<br>
和网络邻居中一样的机器列表.<br>
unit NetBrwsr;<br>
interface<br>
uses<br>
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;<br>
type<br>
TNetScope = (nsConnected, nsGlobal, nsRemembered, nsContext);<br>
TNetResourceType = (nrAny, nrDisk, nrPrint);<br>
TNetDisplay = (ndDomain, ndGeneric, ndServer, ndShare, ndFile, ndGroup,<br>
ndNetwork, ndRoot, ndShareAdmin, ndDirectory, ndTree, ndNDSContainer);<br>
TNetUsage = set of (nuConnectable, nuContainer);<br>
TNetworkItems = class;<br>
TNetworkItem = class<br>
private<br>
FScope: TNetScope;<br>
FResourceType: TNetResourceType;<br>
FDisplay: TNetDisplay;<br>
FUsage: TNetUsage;<br>
FLocalName: string;<br>
FRemoteName: string;<br>
FComment: string;<br>
FProvider: string;<br>
FSubItems: TNetworkItems;<br>
public<br>
constructor Create;<br>
destructor Destroy; override;<br>
property Scope: TNetScope read FScope;<br>
property ResourceType: TNetResourceType read FResourceType;<br>
property Display: TNetDisplay read FDisplay;<br>
property Usage: TNetUsage read FUsage;<br>
property LocalName: string read FLocalName;<br>
property RemoteName: string read FRemoteName;<br>
property Comment: string read FComment;<br>
property Provider: string read FProvider;<br>
property SubItems: TNetworkItems read FSubItems;<br>
end;<br>
TNetworkItems = class<br>
private<br>
FList: TList;<br>
procedure SetItem(Index: Integer; Value: TNetworkItem);<br>
function GetItem(Index: Integer): TNetworkItem;<br>
function GetCount: Integer;<br>
public<br>
constructor Create;<br>
destructor Destroy; override;<br>
procedure Clear;<br>
procedure Add(Item: TNetworkItem);<br>
procedure Delete(Index: Integer);<br>
property Items[Index: Integer]: TNetworkItem read GetItem write<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -