在服务器端的窗口open事件中这样写的:
ole_1.object.protocol=0 //winsock通讯协议设为TCP协议
ole_1.object.localport=8001
ole_1.object.listen()
控件的Connectionrequest事件中这样写的:
if ole_1.object.state<>0 then
ole_1.object.close()
end if
ole_1.object.accept(requestID)
控件的dataarrival事件中这样写的:
string datastr1
ole_1.object.getdata(datastr1)
sle_2.text=datastr1 客户端的open事件中这样写:
winsock_b.object.protocol=0
winsock_b.object.remotehost="192.168.3.169"
winsock_b.object.remoteport=8001
winsock_b.object.connect() //发出连接请求winsock_b.object.senddata("测试数据") //发送数据通过上面的代码,由客户端向服务器端发送数据,服务器端的ole_1.object.getdata(datastr1)接受到的值总为空,请帮忙看一下,错误出在哪???
ole_1.object.protocol=0 //winsock通讯协议设为TCP协议
ole_1.object.localport=8001
ole_1.object.listen()
控件的Connectionrequest事件中这样写的:
if ole_1.object.state<>0 then
ole_1.object.close()
end if
ole_1.object.accept(requestID)
控件的dataarrival事件中这样写的:
string datastr1
ole_1.object.getdata(datastr1)
sle_2.text=datastr1 客户端的open事件中这样写:
winsock_b.object.protocol=0
winsock_b.object.remotehost="192.168.3.169"
winsock_b.object.remoteport=8001
winsock_b.object.connect() //发出连接请求winsock_b.object.senddata("测试数据") //发送数据通过上面的代码,由客户端向服务器端发送数据,服务器端的ole_1.object.getdata(datastr1)接受到的值总为空,请帮忙看一下,错误出在哪???
解决方案 »
- VB中如何调用DLL返回值为字符串指针的无参函数
- VC写的DLL 调用在VB中怎么调用??
- 如何用VB程序实现PC机控制的系统的PID校正呢?谢谢高人指点~~~
- 不知道错在哪??救命啊
- 关于VB访问不同域里面的数据库服务器(在线等待)
- access 报表问题,非常急,建议就给分!
- strCommand = "mnuMain.Caption",有这样一个变量,我想实现strCommand = "Exit",这样宏替换,VB里该怎么写呢?
- 用代码实现Mdi中的指定窗体,成为活动的,并在所有窗体的最上层显示。(成为活动的了就应该是在所有窗体的最上层了吧?)
- 我不想鼠标拖放改变窗体的大小怎样作,怎样做。
- 学数学?搞编程?孰有前途。。。
- ADO连接SQL Server的一个问题。
- 数据库标识问题:
winsock_b.object.senddata("测试数据") //发送数据
end if
getdata(datastr1) 触发了吗?
才能正常连接,并发送数据,winsock_b.object.connect() //发出连接请求
winsock_b.object.senddata("测试数据") //发送数据这两句如果在一起,是send不行的
我在
winsock_b.object.connect() //发出连接请求
winsock_b.object.senddata("测试数据") //发送数据
之间sleep(2000)即:
winsock_b.object.connect() //发出连接请求
sleep(2000)
winsock_b.object.senddata("测试数据") //发送数据然后在接受端的dataarrival事件中这样写的:
string datastr1
ole_1.object.getdata(datastr1)还是不好用呀!!
你必须保证客户端winsock连接上服务器端然后在状态正常的情况下,客户端发送数据
服务器端 dataarrival事件 触发才能正确 getdata(datastr1)
表1 Winsock控件的State属性及其描述常数 值 描述
sckClosed 0 缺省值,关闭。
SckOpen 1 打开。
SckListening 2 侦听
sckConnectionPending 3 连接挂起
sckResolvingHost 4 识别主机。
sckHostResolved 5 已识别主机
sckConnecting 6 正在连接。
sckConnected 7 已连接。
sckClosing 8 同级人员正在关闭连接。
sckError 9 错误。
sckClosed 0 缺省值,关闭。
SckOpen 1 打开。
SckListening 2 侦听
sckConnectionPending 3 连接挂起
sckResolvingHost 4 识别主机。
sckHostResolved 5 已识别主机
sckConnecting 6 正在连接。
sckConnected 7 已连接。
sckClosing 8 同级人员正在关闭连接。
sckError 9 错误。 先在一台计算机上运行服务器程序,此时窗口上只有一个“退出”按钮。 再在另一台计算机上运行客户机程序,在“连接”按钮右边的文本框中输入服务器 的主机名后单击“连接”按钮。如果连接成功,则服务器和客户机程序窗口都会出现两个文本框。这时,两端都可以在上面的文本框中输入文字,这些文字会立即在下面的文本框中出现。 服务器程序使用的控件如下: (1)Command1:退出按钮; (2)textsend:发送数据文本框; (3)Winsockserver: 服务器Winsock; (4)textget :接收数据文本框。 服务器程序的界面如图所示。 服务器程序的源代码如下: Private Sub Command1_Click() End End Sub Private Sub Form_Load() textsend.Visible = False textget.Visible = False Winsockserver.LocalPort = 1001 Winsockserver.Listen End Sub Private Sub textsend_Change() Winsockserver.SendData textsend.Text End Sub Private Sub Winsockserver_Close() Winsockserver.Close End End Sub Private Sub Winsockserver_ConnectionRequest(ByVal requestID As Long) textsend.Visible = True textget.Visible = True If Winsockserver.State <> sckClosed Then Winsockserver.Close Winsockserver.Accept requestID End Sub Private Sub Winsockserver_DataArrival(ByVal bytesTotal As Long) Dim tmpstr As String Winsockserver.GetData tmpstr textget.Text = tmpstr End Sub 客户机程序使用的控件如下: (1)Command1:退出按钮; (2)Command2:连接按钮; (3)Winsockclient:客户Winsock; (4)Text1:主机名文本框; (5)Textsend:发送数据文本框; (6)Textget:接收数据文本框; 客户机程序的界面如图所示。 客户机程序的源代码如下: Private Sub Command1_Click() End End Sub Private Sub Command2_Click() Winsockclient.Connect End Sub Private Sub Form_Load() textsend.Visible = False textget.Visible = False Winsockclient.RemotePort = 1001 Winsockclient.RemoteHost = "sccdsz" End Sub Private Sub Text1_Change() Winsockclient.RemoteHost = Text1.Text End Sub Private Sub textsend_Change() Winsockclient.SendData textsend.Text End Sub Private Sub Winsockclient_Close() Winsockclient.Close End End Sub Private Sub winsockclient_Connect() textsend.Visible = True textget.Visible = True Command2.Visible = False End Sub Private Sub winsockclient_DataArrival(ByVal bytesTotal As Long) Dim tmpstr As String Winsockclient.GetData tmpstr textget.Text = tmpstr End Sub
以上的代码我都看了,原理我也比较清楚。
但是我现在的情况是这样,我的服务端程序是VC写的,而客户端是PB写的,所以调用了这个控件。当向服务器端发送数据时,VC写的WinSocket可以收到数据,但是当服务端向客户端发数据时,客户端这个控件的GetData()函数死活收不到数据。
我做了测试,如果C/S均是用VC来写,发送和接受均一点问题也没有,这说明我的VC服务端没有问题;如果C/S均用PB来写,就接受不到数据;如果是我现在的情况,服务端用VC写,客户端用PB调OCX控件,发送没问题,而接受不到数据。
通过这个测试,我想问一下,微软的这个控件是否对PB有bug。不知道有没有别的方法或是补丁之类的东西!!!!