预览模式: 普通 | 列表

php server函数大全

php $_SERVER当前完整url的写法
"http://".$_SERVER ['HTTP_HOST'].$_SERVER['PHP_SELF']."?".$_SERVER['QUERY_STRING'];
 

php server函数大全

SERVER["HTTP_ACCEPT"]=*/*
$_SERVER["HTTP_REFERER"]=http://localhost/lianxi/
$_SERVER["HTTP_ACCEPT_LANGUAGE"]=zh-cn
$_SERVER["HTTP_ACCEPT_ENCODING"]=gzip, deflate
$_SERVER["HTTP_USER_AGENT"]=Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
$_SERVER["HTTP_HOST"]=localhost
$_SERVER["HTTP_CONNECTION"]=Keep-Alive
$_SERVER["PATH"]=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Common Files\Adobe\AGL;C:\Program Files\MySQL\MySQL Server 5.0\bin;C:\php;C:\php\ext
$_SERVER["SystemRoot"]=C:\WINDOWS
$_SERVER["COMSPEC"]=C:\WINDOWS\system32\cmd.exe
$_SERVER["PATHEXT"]=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
$_SERVER["WINDIR"]=C:\WINDOWS
$_SERVER["SERVER_SIGNATURE"]=
Apache/2.0.55 (Win32) PHP/5.1.1 Server at localhost Port 80 \\使用的何服务器
$_SERVER["SERVER_SOFTWARE"]=Apache/2.0.55 (Win32) PHP/5.1.1
$_SERVER["SERVER_NAME"]=localhost \\服务器名称
$_SERVER["SERVER_ADDR"]=127.0.0.1
$_SERVER["SERVER_PORT"]=80 \\服务器端口
$_SERVER["REMOTE_ADDR"]=127.0.0.1
$_SERVER["DOCUMENT_ROOT"]=D:/lianxi \\网站的主目录
$_SERVER["SERVER_ADMIN"]=sss@163.com \\安装APACHE时设置的邮箱
$_SERVER["SCRIPT_FILENAME"]=D:/lianxi/lianxi/servervalues.php \\当前的网页的绝对路径,
$_SERVER["REMOTE_PORT"]=1076 \\远程端口
$_SERVER["GATEWAY_INTERFACE"]=CGI/1.1
$_SERVER["SERVER_PROTOCOL"]=HTTP/1.1
$_SERVER["REQUEST_METHOD"]=GET
$_SERVER["QUERY_STRING"]=\\获取?号后面的内容
$_SERVER["REQUEST_URI"]=例子:/lianxi/servervalues.php?a=1&b=2
$_SERVER["SCRIPT_NAME"]=例子:/lianxi/servervalues.php
$_SERVER["PHP_SELF"]=/lianxi/servervalues.php \\返回当前网页的相对路径.
$_SERVER["REQUEST_TIME"]=1179190013 \\运行时间 单位为十万分之一毫秒
$_SERVER["argv"]=Array
$_SERVER["argc"]=0
说明:返回此结果运行的网站的主目录是D:/lianxi
<?php
foreach($_SERVER as $asd =>$values)
{
echo("\$_SERVER[\"$asd\"]=".$values."</p>");
}
$_SERVER存储当前服务器信息,其中有几个值 如$_SERVER["QUERY_STRING"],$_SERVER["REQUEST_URI"],$_SERVER["SCRIPT_NAME"] 和$_SERVER["PHP_SELF"]常常容易混淆,以下通过实例详解$_SERVER函数中 QUERY_STRING,REQUEST_URI,SCRIPT_NAME和PHP_SELF变量区别,掌握这四者之间的关系,便于在实际应用中正确获 取所需要的值,供参考。

1,$_SERVER["QUERY_STRING"]
说明:查询(query)的字符串
2,$_SERVER["REQUEST_URI"]
说明:访问此页面所需的URI
3,$_SERVER["SCRIPT_NAME"]
说明:包含当前脚本的路径
4,$_SERVER["PHP_SELF"]
说明:当前正在执行脚本的文件名
实例:
1,http://www.*******.com/ (直接打开主页)
结果:
$_SERVER["QUERY_STRING"] = “”
$_SERVER["REQUEST_URI"] = “/”
$_SERVER["SCRIPT_NAME"] = “/index.php”
$_SERVER["PHP_SELF"] = “/index.php”
2,http://www.*******.com/?p=222 (附带查询)
结果:
$_SERVER["QUERY_STRING"] = “p=222″
$_SERVER["REQUEST_URI"] = “/?p=222″
$_SERVER["SCRIPT_NAME"] = “/index.php”
$_SERVER["PHP_SELF"] = “/index.php”
3,http://www.*******.com/index.php?p=222&q=biuuu
结果:
$_SERVER["QUERY_STRING"] = “p=222&q=biuuu”
$_SERVER["REQUEST_URI"] = “/index.php?p=222&q=biuuu”
$_SERVER["SCRIPT_NAME"] = “/index.php”
$_SERVER["PHP_SELF"] = “/index.php”
$_SERVER["QUERY_STRING"]获取查询语句,实例中可知,获取的是?后面的值
$_SERVER["REQUEST_URI"] 获取http://www.*******.com后面的值,包括/
$_SERVER["SCRIPT_NAME"] 获取当前脚本的路径,如:index.php
$_SERVER["PHP_SELF"] 当前正在执行脚本的文件名
总结一下,对于QUERY_STRING,REQUEST_URI,SCRIPT_NAME和PHP_SELF,深入了解将有利于我们 在$_SERVER函数中正确调用这四个值。通过实例详解$_SERVER函数中 QUERY_STRING,REQUEST_URI,SCRIPT_NAME和PHP_SELF掌握四个变量之间的区别。

Tags: php

分类:技术文章 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 3056

vb用SendMessage操作剪贴板

要使用这一技巧,你就需要声明用于剪切、复制和粘贴的常数:

Private Const WM_COPY = &H301
Private Const WM_CUT = &H300
Private Const WM_PASTE = &H302

然后,声明对SendMessage API的调用:

Private Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" (ByValhWnd As Long, _
ByValwMsg As Long, ByValwParam As Long, lParam As Any) As Long

  HWnd自变量能够接受消息发送的目的控件的句柄,而wMsg自变量会接受一个表明要被发送的是哪个对象的常数。WParam和lParam自变量被用来把其他信息同消息一起传递,但是不对WM_CUT、WM_COPY或者WM_PASTE使用。

  下面是从菜单点击事件调用SendMessage API的代码:

Private Sub mnuCopy_Click()
Call SendMessage(Me.ActiveControl.hwnd, WM_COPY, 0, 0)
End Sub

Private Sub mnuCut_Click()
Call SendMessage(Me.ActiveControl.hwnd, WM_CUT, 0, 0)
End Sub

Private Sub mnuPaste_Click()
Call SendMessage(Me.ActiveControl.hwnd, WM_PASTE, 0, 0)
End Sub

  这个技巧能够用于任何实现hWnd属性,并能够响应WM_CUT、WM_COPY和WM_PASTE消息的控件。还应该实现错误处理,以处理不带hWnd属性的控件。

Tags: vb

分类:技术文章 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 4931

vb用Like比较字符串

Like运算符可以让你比较两个字符串来判断它们是否匹配,它还支持通配符。例如,星号(*)代表一个或者多个字符,问号(?)代表单个字符,而井号(#)代表单个数字。另外,通过使用左括号和右括号([、]),你可以指定一个用来匹配的字符集合。

  下面的代码给出了几种可以使用Like运算符的方法。

If "(800) 555-5555" Like "(###) ###-####"
Then
注释:有效的电话号码
End If

If "1ABCDEF" Like "#[A-Z]*" Then
注释:有效
End If

If "1ABCDEF" Like "#[a-z]*" Then
注释:有效
End If
  Like运算符可以简化你的验证有效性逻辑并提高易读性。对比较复杂方式,它也比InStr函数易于使用。

Tags: vb

分类:技术文章 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 3654

vb取得Windows临时文件的路径

要获得Windows的临时文件的存放路径,可以使用GetTempPath API函数。以下是该函数的声明:

Private Declare Function GetTempPath Lib "kernel32" Alias_

"GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long



  调用前,初始化一个(通常长为255)的以null为结尾的字符串,长度为字符长度加1。然后调用这个函数,这个函数的返回值是一个Long型的变量,该返回值将是TEMP路经的真实长度。

Dim lngFolderSize As Long
Dim strFolder As String
Dim lngLength As Long

lngFolderSize = 255
strFolder = String(lngFolderSize + 1, 0)
lngLength = GetTempPath(lngFolderSize, strFolder)
If lngLength > 1 Then
strFolder = Left(strFolder, lngLength)
Else
strFolder = vbNullString
End If

MsgBox strFolder

当你的用户需要确定临时文件目录,并且应用程序将在那里创建临时的工作文件时,这个API函数将十分有用。

Tags: vb

分类:技术文章 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 3224

VB利用API创建文件目录

Private Declare Function CreateDirectory Lib "kernel32" Alias "CreateDirectoryA" (ByVal lpPathName As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long
Private Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type
Sub Main()

  在C盘创建了"VB API"目录

  Call CreateNewDirectory("C:\VB API")

  MsgBox "在C盘创建了 VB API 目录"

查看更多...

Tags: vb

分类:技术文章 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 3276

VB对数据进行加解解密

 

  简易加解密算法要求:

  1、 算法不宜过于复杂,且具有一定的保密性

  2、 对于高级语言很容易能实现

查看更多...

Tags: vb

分类:技术文章 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 2626

VB创建可以输出函数的DLL

 

  VB编译文件实际上采取了两次编译的方法,首先是调用c2.exe产生OBJ文件,然后调用Link.exe连接。如果在link的时候添加EXPORT选项,实际上是可以输出函数的。但是,在VB的工程选项中将这些屏蔽了。而且过分的是:VB在Build完成后会将OBJ文件删除,这样就无法通过Link来输出函数了。不过我找到一个比较龌鹾的变通的方法,就是先创建一个Exe工程,在Form_Load事件里面写下面的语句:

  Private Sub Form_Load()
If (MsgBox("hehe", vbOKCancel) = vbOK) Then
Shell "link2.exe " & Command$
End If
End
End Sub

  然后编译为linktemp.exe,接下来将LINK.EXE改名为Link2.exe,将linktemp.exe改名为link.exe。这样在VB调用link.exe时会弹出对话框,处理就会中断。这时就可以有机会将OBJ文件拷贝出来了 J

查看更多...

Tags: vb

分类:技术文章 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 2366

VB开发、打包、发布ActiveX控件

     1、创建一个ActiveX Control的项目

     2、绘制ActiveX控件的操作界面,并且编写代码

     3、特别注意:在项目的属性上的Make页,有一个Version Number区域,需要你写当前控件
        的版本号,这个地方和自动下载有密切关系!当你远端的Web浏览器检查到本机的控件
        版本号和服务器上不一样的时候,浏览器就会自动从服务器下载新版本控件进行安装,
        所以你编译的新版本控件一定要改版本号!否则可能导致远程无法更新。

查看更多...

Tags: vb

分类:技术文章 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 6711

vb打开文本文件

如何更有效地打开文本文件应该是一个值得研究的课题,假设F盘下有一个名为d.txt的文本文件,若需要尝试这些例子请作相应的改动。
  
  方法一:
  用定长的String变量获取文本内容。由于定长String变量支持的下界为65400,所以在打开超过32K字节的文件时超出部分的字节将无法获取:
  Private Sub Command1_Cliack()
  Dim sA As String * 65400 '声明定长String变量
  Open "F:\d.txt" For Binary As #1 '用二进制打开文件
  Get #1, , sA '用Get语句从文件中获取字节
  Text1 = sA '显示打开的文件
  Close #1 '关闭文件
  End Sub
  
  方法二:
  先声明一字符串变量,然后用空格填充字符串,使变量大小与文件大小一致,再通过Get语句将文件全部数据存储到变量中,从而达到获取整个文件字节数的目的。此法可以打开大于32K的文件,但应该注意的是,装载文件的容器必须能装载大于32K的文件,下例用RichTextBox控件显示打开的文件:
  Private Sub Command1_Click()
  Dim sA As String
  Open "f:\d.txt" For Binary As #1
  sA = Space(LOF(1)) '用空格填充sA变量
  Get #1, , sA '用Get语句获取文件全部内容
  RichTextBox1.Text = sA
  Close #1
  End Sub
  
  方法三:
  用StrConv函数将文件的控制字符串数据和Unicode码之间进行转换,从而达到打开文件的目的。可打开任意大小文件。此法笔者曾有一篇文章谈及,这里再给一个简单例子:
  Private Sub Command1_Click()
  Open "f:\d.txt" For Input As #1
  RichTextBox1.Text = StrConv(InputB$(LOF(1), 1), vbUnicode)
  Close #1
  End Sub
  
  方法四:
  用Shell语句直接调出Windows的记事本,给个文件名即可轻而易举地打开文本文件。此法适合于打开程序的Readme文件(注意:在可执行文件和要打开的文本文件之间要有空格):
  Shell "NotePad.EXE f:\d.txt",vbNormalFucus
  
  方法五:
  用RichTextBox控件自身的LoadFile属性打开文件:
  RichTextBox1.LoadFile "f:\d.txt", rtfText

Tags: vb

分类:技术文章 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 4568

VB拷贝文件,拷贝文件夹

1、添加引用microsoft    scripting    runtime   
   方法:选择菜单“工程”-->“引用”-->选择“microsoft    scripting    runtime”   
    
   2、使用方法   
   Option    Explicit   
    
   Private    Sub    Form_Load()   
   Dim    FileSys    As    New    FileSystemObject   
   Dim    FolderObj    As    Folder   
   Set    FileSys    =    CreateObject("scripting.filesystemobject")   
   FileSys.CopyFile    "c:\ss.txt",    "d:\mm.txt",    True    '拷贝文件   
   FileSys.CopyFolder    "c:\1",    "d:\2",    True            '拷贝文件夹

Tags: vb

分类:技术文章 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 5497

vb编程Winsock控件用法

利用 WinSock 控件可以与远程计算机建立连接,并通过用户数据文报协议 (UDP)或者传输控制协议 (TCP)进行数据交换。这两种协议都可以用来创建客户与服务器应用程序。与 Timer 控件类似,WinSock 控件在运行时是不可见的。

可能的用途
创建收集用户信息的客户端应用程序,并将收集的信息发送到某中央服务器。


创建一个服务器应用程序,作为多个用户的数据的汇入点。


创建“聊天”应用程序。
选择通讯协议
在使用 WinSock 控件时,首先需要考虑使用什么协议。可以使用的协议包括 TCP 和 UDP。两种协议之间的重要区别在于它们的连接状态:

TCP 协议控件是基于连接的协议,可以将它同电话系统相比。在开始数据传输之前,用户必须先建立连接。


UDP 协议是一种无连接协议,两台计算机之间的传输类似于传递邮件:消息从一台计算机发送到另一台计算机,但是两者之间没有明确的连接。另外,单次传输的最大数据量取决于具体的网络。
到底选择哪一种协议通常是由需要创建的应用程序决定的。下面的几个问题将有助于选择适宜的协议:

在收发数据的时候,应用程序是否需要得到客户端或者服务器的确认信息?如果需要,使用 TCP 协议,在收发数据之前先建立明确的连接。


数据量是否特别大(例如图象与声音文件)?在连接建立之后,TCP 协议将维护连接并确保数据的完整性。不过,这种连接需要更多的计算资源,因而是比较“昂贵”的。


数据发送是间歇的,还是在一个会话内?例如,如果应用程序在某个任务完成的时候需要通知某个计算机,UDP 协议是更适宜的。UDP 协议适合发送少量的数据。
协议的设置
在设计时,可以按如下方式设置应用程序使用的协议:在“属性”窗口中单击“协议”,然后选择 sckTCPProtocol 或者 sckUDPProtocol。也可以使用程序代码来设置 Protocol 属性,如下所示:

Winsock1.Protocol = sckTCPProtocol

确定计算机的名称
在与远程计算机相连接的时候,需要知道它的 IP 地址或者它的“好听的名字”。IP 地址是一串数字,每三个数字为一组,中间用点隔开(形如 xxx.xxx.xxx.xxx)。通常,最易记住的是计算机的“好听的名字”。

要确定计算机的名字,请按照以下步骤执行:

在计算机的“任务栏”上,单击“启动”。


在“设置”项中,单击“控制面板”。


双击“网络”图标。


单击“标识”选项卡。


在“计算机名称”框中可以找到计算机的名称。
上面找到的计算机名称可以作为 RemoteHost 属性的值。

TCP 连接初步
如果应用程序要使用 TCP 协议,那么首先必须决定应用程序是服务器还是客户端。如果要创建一个服务器端,那么应用程序需要“监听”指定的端口。当客户端提出连接请求时,服务器端能够接受请求并建立连接。在连接建立之后,客户端与服务器端可以自由地互相通讯。

下列步骤创建一个非常简单的服务器:

要创建一个 TCP 服务器,请按照以下步骤执行:

创建新的 Standard EXE 工程。


将缺省窗体的名称改为 frmServer。


将窗体的标题改为“TCP 服务器”。


在窗体中放入一个 Winsock 控件,并将它的名字改为 tcpServer。


在窗体上添加两个 TextBox 控件。将第一个命名为 txtSendData,第二个为 txtOutput。


为窗体添加如下的代码。
Private Sub Form_Load()
'将 LocalPort 属性设置为一个整数。
'然后调用 Listen 方法。
tcpServer.LocalPort = 1001
tcpServer.Listen
frmClient.Show '显示客户端的窗体。
End Sub

Private Sub tcpServer_ConnectionRequest _
(ByVal requestID As Long)
'检查控件的 State 属性是否为关闭的。
'如果不是,
'在接受新的连接之前先关闭此连接。
If tcpServer.State <> sckClosed Then _
tcpServer.Close
'接受具有 requestID 参数的
'连接。
tcpServer.Accept requestID
End Sub

Private Sub txtSendData_Change()
'名为 txtSendData 的 TextBox 控件中
'包含了要发送的数据。当用户往文本框中
'键入数据时,使用 SendData 方法
'发送输入的字符串。
tcpServer.SendData txtSendData.Text
End Sub

Private Sub tcpServer_DataArrival _
(ByVal bytesTotal As Long)
'为进入的数据声明一个变量。
'调用 GetData 方法,并将数据赋予名为 txtOutput
'的 TextBox 的 Text 属性。
Dim strData As String
tcpServer.GetData strData
txtOutput.Text = strData
End Sub

上面的步骤创建了一个简单的服务器应用程序。为了使它能够工作,还必须为它创建一个客户端的应用程序。

要创建 TCP 客户端,请按照以下步骤执行:

在工程中添加一个新的窗体,将其命名为 frmClient。


将窗体的标题改为“TCP Client”。


在窗体中添加一个 Winsock 控件,并将其命名为 tcpClient。


在 frmClient 中添加两个 TextBox 控件。将第一个命名为 txtSend,第二个为 txtOutput。


在窗体上放一个 CommandButton 控件,并将其命名为 cmdConnect。


将 CommandButton 控件的标题改为 Connect。


在窗体中添加如下的代码。
重点 必须将 RemoteHost 属性值修改为您的计算机的名字。

Private Sub Form_Load()
'Winsock 控件的名字为 tcpClient。
'注意:要指定远程主机,可以使用
' IP 地址(例如:"121.111.1.1"),也可以使用
'计算机的“好听的名字”如下所示。
tcpClient.RemoteHost = "RemoteComputerName"
tcpClient.RemotePort = 1001
End Sub

Private Sub cmdConnect_Click()
'调用 Connect 方法,初始化连接。
tcpClient.Connect
End Sub

Private Sub txtSendData_Change()
tcpClient.SendData txtSend.Text
End Sub

Private Sub tcpClient_DataArrival _
(ByVal bytesTotal As Long)
Dim strData As String
tcpClient.GetData strData
txtOutput.Text = strData
End Sub

上面的代码创建了一个简单的客户/服务器模式的应用程序。我们可以将两者都运行起来:运行工程,然后单击“连接”。在两个窗体之一的 txtSendData 文本框中键入文本,可以看到同样的文字将出现在另一个窗体的 txtOutput 文本框中。

接受多个连接请求
上面设计的基本服务器只能接受一个连接请求。通过创建控件数组,使用一个控件也可以同时接受多个连接请求。利用这种方法,不需要关闭连接,而只需创建新的控件实例(通过设置其索引属性),然后在新的实例上调用 Accept 方法。

下面的代码假定名为 sckServer 的窗体上有一个 Winsock 控件,它的 Index 属性被设置为 0;因此控件是控件数组的一部分。在声明部分,声明了一个模块级的变量 intMax。在窗体的 Load 事件中,intMax 被设置为 0,数组中第一个控件的 LocalPort 属性被设置为 1001。然后调用控件的 Listen 方法,使之成为“监听”控件。在连接请求到达时,代码将检测 Index 是否为 0(“监听”控件的值)。如果为 0,监听控件将增加 intMax 的值,并使用该号码来创建新的控件实例。然后,使用新的控件实例接受连接请求。

Private intMax As Long

Private Sub Form_Load()
intMax = 0
sckServer(0).LocalPort = 1001
sckServer(0).Listen
End Sub

Private Sub sckServer_ConnectionRequest _
(Index As Integer, ByVal requestID As Long)
If Index = 0 Then
intMax = intMax + 1
Load sckServer(intMax)
sckServer(intMax).LocalPort = 0
sckServer(intMax).Accept requestID
Load txtData(intMax)
End If
End Sub

UDP 初步
创建 UDP 应用程序比创建 TCP 应用程序还要简单,因为 UDP 协议不需要显式的连接。在上面的 TCP 应用程序中,一个 Winsock 控件必须显式地进行“监听”,另一个必须使用 Connect 方法初始化连接。

UDP 协议不需要显式的连接。要在两个控件中间发送数据,需要完成以下的三步(在连接的双方):

将 RemoteHost 属性设置为另一台计算机的名称。


将 RemotePort 属性设置为第二个控件的 LocalPort 属性。


调用 Bind 方法,指定使用的 LocalPort。(下面将详细地讨论该方法。)
因为两台计算机的地位可以看成“平等的”,这种应用程序也被称为点到点的。为了具体说明这个问题,下面将创建一个“聊天”应用程序,两个人可以通过它进行实时的交谈。

要创建一个 UDP 伙伴,请按照以下步骤执行:

创建一个新的 Standard EXE 工程。


将缺省的窗体的名称修改为 frmPeerA。


将窗体的标题修改为“Peer A”。


在窗体中放入一个 Winsock 控件,并将其命名为 udpPeerA。


在“属性”页上,单击“协议”并将协议修改为 UDPProtocol。


在窗体中添加两个 TextBox 控件。将第一个命名为 txtSend,第二个命名为 txtOutput。


为窗体增加如下的代码。
Private Sub Form_Load()
'控件的名字为 udpPeerA
With udpPeerA
'重点:必须将 RemoteHost 的值
'修改为计算机的名字。
.RemoteHost= "PeerB"
.RemotePort = 1001 '连接的端口号。
.Bind 1002 '绑定到本地的端口。
End With
frmPeerB.Show '显示第二个窗体。
End Sub

Private Sub txtSend_Change()
'在键入文本时,立即将其发送出去。
udpPeerA.SendData txtSend.Text
End Sub

Private Sub udpPeerA_DataArrival _
(ByVal bytesTotal As Long)
Dim strData As String
udpPeerA.GetData strData
txtOutput.Text = strData
End Sub

要创建第二个 UDP 伙伴,请按照以下步骤执行:

在工程中添加一个标准窗体。


将窗体的名字修改为 frmPeerB。


将窗体的标题修改为“Peer B”。


在窗体中放入一个 Winsock 控件,并将其命名为 udpPeerB。


在“属性”页上,单击“协议”并将协议修改为“UDPProtocol”。


在窗体上添加两个 TextBox 控件。将第一个命名为 txtSend,第二个命名为 txtOutput。


在窗体中添加如下的代码。
Private Sub Form_Load()
'控件的名字为 udpPeerB。
With udpPeerB
'重点:必须将 RemoteHost 的值改为
'计算机的名字。
.RemoteHost= "PeerA"
.RemotePort = 1002 '要连接的端口。
.Bind 1001 '绑定到本地的端口上。
End With
End Sub

Private Sub txtSend_Change()
'在键入后立即发送文本。
udpPeerB.SendData txtSend.Text
End Sub

Private Sub udpPeerB_DataArrival _
(ByVal bytesTotal As Long)
Dim strData As String
udpPeerB.GetData strData
txtOutput.Text = strData
End Sub

如果要试用上面的例子,按 F5 键运行工程,然后在两个窗体的 txtSend TextBox 中分别键入一些文本。键入的文字将出现在另一个窗体的 txtOutput TextBox 中。

关于 Bind 方法
在上面的代码中,在创建 UDP 应用程序时调用了 Bind 方法,这是必须的。Bind 方法的作用是为控件“保留”一个本地端口。例如,如果将控件绑定到 1001 号端口,那么其它应用程序将不能使用该端口进行“监听”。该方法阻止其它应用程序使用同样的端口。

Bind 方法的第二个参数是任选的。如果计算机上存在多个网络适配器,可以用 LocalIP 参数来指定使用哪一个适配器。如果忽略该参数,控件使用的将是计算机上“控制面板”设置中“网络”控制面板对话框中列出的第一个适配器。

在使用 UDP 协议的时候,可以任意地改变 RemoteHost 和 RemotePort 属性,同时始终保持绑定在同一个 LocalPort 上。TCP 协议与此不同,在改变 RemoteHost 和 RemotePort 属性之前,必须先关闭连接。

Tags: vb

分类:技术文章 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 3592

VB里的statusbar控件用法

StatusBar 控件由 Panel 对象组成,每一个 Panel 对象能包含文本和/或图片。控制个别面板的外观属性包括 Width、Alignment(文本和图片的)和 Bevel。此外,能使用 Style 属性七个值中的一个自动地显示公共数据,诸如日期、时间和键盘状态等。

在设计时,在 StatusBar 控件的属性页的“窗格”选项卡中设置的值能建立面板并定制它们的外观。在运行时,能重新配置 Panel 对象以反映不同的功能,这些功能取决于应用程序的状态。关于 Panel 对象的属性、事件和方法的详细信息,请参阅“Panel 对象和 Panels 集合”的主题。

StatusBar 控件代表性地显示有关在窗体上查看的对象、对象组件的信息或关系到对象操作的上下文的信息。StatusBar 控件与其它控件如 Toolbar 控件一起,提供建立界面的工具,该界面既经济又含有丰富的信息。

发行注意 StatusBar 控件是自定义控件组的一部分,该控件可在 MSCOMCTL.OCX 文件中找到。为了在应用程序中使用 StatusBar 控件,必须将 MSCOMCTL.OCX 文件添加到工程中。当发布应用程序时,请在用户的 Microsoft Windows SYSTEM 目录下安装 MSCOMCTL.OCX 文件。如何将自定义的控件添加到工程中的详细信息,请参阅《程序员指南》。


StatusBar 控件常数


StatusBar 样式常数

常数 值 描述
sbrNormal 0 正常。StatusBar 被分成面板。
sbrSimple 1 简化。StatusBar 只有一个大面板和简化文本。


面板对齐常数

常数 值 描述
sbrLeft 0 文本靠左。
sbrCenter 1 文本居中。
sbrRight 2 文本靠右。


面板自动调整大小常数

常数 值 描述
sbrNoAutoSize 0 非自动调整大小。
sbrSpring 1 在面板中划分附加空间。
sbrContents 2 符合于目录。


面板斜面常数

常数 值 描述
sbrNoBevel 0 无斜面。
sbrInset 1 斜面插入。
sbrRaised 2 斜面凸起。


面板样式常数

常数 值 描述
sbrText 0 显示文本和/或位图。
sbrCaps 1 显示 Caps Lock 状态。
sbrNum 2 显示 Number Lock 状态。
sbrIns 3 显示 Insert 键状态。
sbrScrl 4 显示 Scroll Lock 状态。
sbrTime 5 以 System 格式显示时间。
sbrDate 6 以 System 格式显示日期。
sbrKana 7 Kana。当激活滚动锁定时,显示黑体字母 KANA,反之当停用滚动锁定时,则显示暗淡的字母 KANA。

Tags: vb

分类:技术文章 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 5209

 广告位

↑返回顶部↑