WPE|52wpe|我爱WPE

 找回密码
 注册会员
搜索
  • 3469查看
  • 6回复

主题

好友

1700

积分

禁止访问

发表于 2010-1-20 16:38:11 |显示全部楼层
首先,新建一工程,名为Server,新建一个窗体,Name为Server,在窗体中加入一个winsock控件,Name设为sckServer,协议设为默认的TCP/IP协议。

  接下来我们回来Server窗体模块中,添加如下代码:

Private Sub form_Load()
 With Me
  .sckServer.LocalPort = 88917'本地端口(呵呵!我的生日!)
  .sckServer.Listen '开始监听
 End With
End Sub

'接受客户端的连接请求。

Private Sub sckServer_ConnectionRequest(ByVal requestID As Long)
 With Me
  If .sckServer.State <>sckClosed Then .sckServer.Close
  .sckServer.Accept (requestID)
 End With
End Sub  

  下面我们来建立客户端程序:新建一个工程,名为Client,把窗体名为Client,在上面加入一个winsock控件,名为sckClient,协议为TCP/IP协议。再加一个按钮cmdConnect在窗体模块中加入代码:

Private Sub form_Load()
 With Me
  .sckClient.RemoteHost = "127.0.0.1"'设置远程IP,本例设为本机。
  .sckClient.RemotePort = 88917 '远程端口,就为server中的设置一样.
 End With
End Sub

Private sub cmdConnect_Click()
 SckClient.Connect
End sub  

  至此,单击Connect按钮我们的两个工程已经可以进行通信了,但看不见,你可以在Client中的sckClient_Connect事件中加入代码:debug.print “Connetion successful!”来查看。

  这仅是第一步,一点工作也做不了,下面我们来为它们添加功能。为了简单,本文章只实现一点小小的功能―――关机,重启,注销。好,开始吧!

  在Server工程中新建一个模块,Name为modApi,这个模快为一些API函数,添加如下API函数:

Public Declare Function ExitWindowXXX Lib "user32" Alias "ExitWindowXXX" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long

Public Const EWX_LOGOFF = 0
Public Const EWX_REBOOT = 2
Public Const EWX_SHUTDOWN = 1
Public Declare Function ClipCursor Lib "user32" Alias "ClipCursor" (lpRect As Any) As Long

Public Type RECT
 Left As Long
 Top As Long
 Right As Long
 Bottom As Long
End Type  

  注:在两个socket中编程中,进行通信的重要事件是DataArrival事件,用于接收远程数据。

  下面在Client工程的Client窗体中放入三个按钮,分别为cmdExit,cmdLogoff,cmdReboot。它们用于对远程的关机,注销,重启操作。分别添加如下代码:

Private Sub cmdExit_Click()
 Me.sckClient.SendData "Exit"
End Sub

Private Sub cmdLogoff_Click()
 Me.sckClient.SendData "Logoff"
End Sub

Private Sub cmdReboot_Click()
 Me.sckClient.SendData "Reboot"
End Sub  

  全都是对服务端发出请求。下面转到Server工程中:在Server中添加sckServer的DataArrial事件,接收客户端的请求。

Private Sub sckServer_DataArrival(ByVal bytesTotal As Long)
 Dim strData As String
 With Me
  ' 接收客户请求的信息
  .sckServer.GetData strData
  Select Case strData
   Case "Exit"
    '关机
    Call ExitWindowXXX(EWX_SHUTDOWN, 0)
   Case "Reboot"
    '重启
    Call ExitWindowXXX(EWX_REBOOT, 0)
   Case "Logoff"
    '注销
   Call ExitWindowXXX(EWX_LOGOFF, 0)
  End Select
 End With

End Sub

主题

好友

552

积分

高级会员

发表于 2010-1-20 18:29:32 |显示全部楼层
完全看不懂。这个还是不适合我的
回复

使用道具 举报

主题

好友

34

积分

新手上路

发表于 2010-5-14 10:40:17 |显示全部楼层
楼主哥哥,看的我头晕
回复

使用道具 举报

主题

好友

34

积分

新手上路

发表于 2010-5-14 16:58:15 |显示全部楼层
全部看不懂  可惜我没考上北大
回复

使用道具 举报

主题

好友

10

积分

新手上路

发表于 2010-5-29 20:34:19 |显示全部楼层
恩恩 很好 又学到东西了
回复

使用道具 举报

主题

好友

54

积分

注册会员

发表于 2011-7-17 18:36:52 |显示全部楼层
英语没学好唉!!!
回复

使用道具 举报

主题

好友

126

积分

注册会员

发表于 2011-9-24 10:19:29 |显示全部楼层
好复杂啊。。
回复

使用道具 举报

快速发帖

您需要登录后才可以回帖 登录 | 注册会员

手机版|Archiver|WPE|52wpe|我爱WPE ( 闽ICP备15009081号 )

GMT+8, 2024-4-28 11:02 , Processed in 0.066577 second(s), 16 queries .

返回顶部