⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wzjh35.htm

📁 对于学习很有帮助
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<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>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CtrlAddress: word;<br>
    Begin { set iic line }<br>
    &nbsp;&nbsp;CtrlAddress:=BaseAddress+2;<br>
    &nbsp;&nbsp;Case Terminal of<br>
    &nbsp;&nbsp;&nbsp;&nbsp;SCL : if High then Port[CtrlAddress]:=$08 else 
    Port[CtrlAddress]:=$00;<br>
    &nbsp;&nbsp;&nbsp;&nbsp;SDA : if NOT High then Port[BaseAddress]:=$80 else 
    Port[BaseAddress]:=$00;<br>
    &nbsp;&nbsp;END;<br>
    &nbsp;&nbsp;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>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SCL_IN=$08; { SCL: 25 pin #15, 
    status, NOT Error, bit 3 }<br>
    var Count : Word;<br>
    &nbsp;&nbsp;&nbsp;&nbsp;ReadAddress: word;<br>
    Begin<br>
    &nbsp;&nbsp;&nbsp;ReadAddress:=BaseAddress+1;<br>
    &nbsp;&nbsp;&nbsp;CASE Terminal OF<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SCL: GetIICline:=((Port[ReadAddress] AND SCL_IN) = SCL_IN);<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SDA: GetIICline:=((Port[ReadAddress] AND SDA_IN) = SDA_IN); 
    { read sda<br>
    pin }<br>
    &nbsp;&nbsp;&nbsp;END;<br>
    &nbsp;&nbsp;&nbsp;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>
    &nbsp;&nbsp;winsock,sysutils;<br>
    VAR<br>
    &nbsp;&nbsp;ch : ARRAY[1..32] OF Char;<br>
    &nbsp;&nbsp;i : Integer;<br>
    &nbsp;&nbsp;WSData: TWSAData;<br>
    &nbsp;&nbsp;MyHost: PHostEnt;<br>
    begin<br>
    &nbsp;&nbsp;IF WSAstartup(2,wsdata)<>0 THEN<br>
    &nbsp;&nbsp;&nbsp;&nbsp;BEGIN<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Writeln('can''t start Winsock: Error 
    ',WSAGetLastError);<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Halt(2);<br>
    &nbsp;&nbsp;&nbsp;&nbsp;END;<br>
    &nbsp;&nbsp;try<br>
    &nbsp;&nbsp;&nbsp;&nbsp;IF getHostName(@ch[1],32)<>0 THEN<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BEGIN<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Writeln('getHostName failed');<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Halt(3);<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;END;<br>
    &nbsp;&nbsp;except<br>
    &nbsp;&nbsp;&nbsp;&nbsp;Writeln('getHostName failed');<br>
    &nbsp;&nbsp;&nbsp;&nbsp;halt(3);<br>
    &nbsp;&nbsp;end;<br>
    &nbsp;&nbsp;MyHost:=GetHostByName(@ch[1]);<br>
    &nbsp;&nbsp;IF MyHost=NIL THEN<br>
    &nbsp;&nbsp;&nbsp;&nbsp;BEGIN<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Writeln(GetHostName('+StrPas(@ch[1])+') failed : Error<br>
    '+IntToStr(WSAGetLastError));<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Halt(4);<br>
    &nbsp;&nbsp;&nbsp;&nbsp;END<br>
    &nbsp;&nbsp;ELSE<br>
    &nbsp;&nbsp;&nbsp;&nbsp;BEGIN<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Write('address ');<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FOR i:=1 TO 4 DO<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BEGIN<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Write(Ord(MyHost.h_addr^[i-1]));<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF i<4 THEN<Br> 
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write('.')<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ELSE<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writeln;<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;END;<br>
    &nbsp;&nbsp;&nbsp;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>
    中打开&quot;整个网络&quot; 来比较一下. 如果你设置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 + -