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

📄 网络和通讯编程.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 background="di2001.jpg"><h3 align="center"><font COLOR="#AOAO99">网络和通讯编程</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>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -