
不过,问题深入一点的话,如果需要接收方反馈信息给发送方的话,就需要做点东西了。或者,发送方需要讲本地进程的一些变量的值发送给接收方的话,那也许要做些东西。
因为,他们不能跨进程相互访问对方的数据。
就像有人试图用 SendMessage( WM_GETTEXT ...)来访问远进程的编辑框内的数据一样。直接这么仿指铅用是不能成功的。想这么做的话,必须:
方法1、使用内核对象等机制来共享数据。
方法2、注入代码到远进程来实现访问,访问后再撤销。
不知道楼主需要的是不是相互发送数据,还是仅仅是发送消息而已。
====================================================
由于最近比较忙,给你写例子的可能性不是很大。抱歉。
不过可以给你一些提示:
方案1:
发送方:
1、首先需要知道接受方处理消息的窗口句柄。
方法有很多,可以枚举所有窗口(EnumWindow),然后判断标题是不是备好接受方的窗口标题,也可以直接由发送方来创建接受方的进程(CreateProcess),然后获得接受方进程的窗口句柄。
2、使用SendMessage( 目标hWnd, 自定义的消息ID, 0L, 0L )向接受方发送消息。
如果不需要等待处理结束才返回,可以使用PostMessage,而不是SendMessage.
3、接受方的消息处理过程中添加对自定义消息的处理过程。
这种方法不能发送数据,仅仅能发送消息而已。
方案2:
1、创逗宽建内核对象,比如CMapFile。定义某种数据结构比如队列。
2、发送方或者接受方,谁先运行谁就创建该内核对象(后运行的是打开而不是创建,方法是首先试图打开,如果失败,则创建)并且使用相同的名字。
3、发送方向对象中填写数据。
4、接受方利用一个单独的线程(或者定时器)检测内核对象中的数据,一旦发现有数据,就取出,并且从内河对象中删除该数据。
这种方法不仅可以发送消息,而且可以发送任何东西。
这代码段尺发送和接收的MSDN6.0中有,在索引中键入winscok 控件,点使用 Winsock 控件
其中关于UDP
协议是一种无连接协议,两台计算机之间的传输类似于传递邮件:消息从一台计算机发送到握明高另一台计算机,但是两者之间没有明确的连接。另外,单次传输的最大数据量取决于具体的网络。
要创建一个 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
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)