客户端向服务器端发送connect请求,而如果服务器端对connectionRequest事件不予响应,即在这个事件过程中没有任何代码,会是一种什么情况呢?
从我写的程序中看是客户端认为连接成功并发送了信息。请问是这样的吗?
另外,客户端发送connect请求,服务器端如果要响应,则先要对相应winsock控件执行close方法,然后使用Accept方法连接,那么使用什么方法表示不接受呢?是不是仅仅采用close方法就表示不接受呢?
从我写的程序中看是客户端认为连接成功并发送了信息。请问是这样的吗?
另外,客户端发送connect请求,服务器端如果要响应,则先要对相应winsock控件执行close方法,然后使用Accept方法连接,那么使用什么方法表示不接受呢?是不是仅仅采用close方法就表示不接受呢?
解决方案 »
- 使用win32 API函数CreateFile有些问题请教
- 报“找不到可插入的isam"的错误是什么原因???
- 怎样临时保存image???
- vb中调用com组件时,com组件会给vb主窗口发消息,请问怎么响应这个消息?
- 如何将菜单文字设置为粗体?
- 》》》vb的class中有类似Form里的Me的成员变量吗???
- 关于文本操作
- 关于用InstallShield安装vb程序的问题!!!急、急、急!!
- 请教:如何将win2000/win nt下开发的vb程序倒到win98下运行并生成安装程序??
- 请教高手,如何在VB中调用ORCALE的存储过程,给小弟一个范例,谢谢
- 请问什么工具可以查看 OCX控件引用了哪些其他的DLL或OCX?
- 请推荐一本优秀的Windows API教程
应该算是状态6,连接中。如果是同一个winsock accept的话当然要close先啦~因为监听中的socket不能使用accept.
如果不接受就别管这个requestID好了,客户端超时自己判断
或者拿一个新的winsock accpet了再close,那客户端就不用等超时。
给你个服务器的例子看看吧
Option Explicit
Private intMax As Long 'winsock最大的下标Private Sub Form_Load()
intMax = 0
Winsock1(0).LocalPort = 7699 '本地监听的端口
Winsock1(0).ListenEnd Sub
'*************************************************************************
'**函 数 名:Winsock1_ConnectionRequest
'**输 入:Index(Integer) -
'** :ByVal requestID(Long) -
'**输 出:无
'**功能描述:对方请求连接时候触发,当没有以前已经关闭的控件的winsock控件数组的话就创建
'**全局变量:
'**调用模块:
'**作 者:影子
'**日 期:2005-02-06 08:39:12
'**修 改 人:
'**日 期:
'**版 本:V1.0.0
'*************************************************************************
Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long) If Index = 0 Then
Dim i As Integer
Dim temp As Integer
temp = 0
For i = 1 To intMax
If Winsock1(i).State = 0 Then
temp = i
Exit For
End If
Next
If temp = 0 Then
intMax = intMax + 1
temp = intMax
End If
Load Winsock1(temp) Winsock1(temp).LocalPort = 0 Winsock1(temp).Accept requestID
End IfEnd Sub
这里你可以sendate一下,如果出错了也是连接失败至于你说的问题我没有遇到
===== 服务器端 ======
Private Sub Form_Load()
Winsock1.LocalPort = "1888"
Winsock1.Listen
End SubPrivate Sub Form_Unload(Cancel As Integer)
Winsock1.Close
End SubPrivate Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
MsgBox (Winsock1.RemoteHostIP)
Winsock1.Close
End Sub====== 客户端 ======Private Sub Command1_Click()
If Winsock1.State <> 0 Then
Winsock1.Close
End If
MsgBox (Winsock1.State)
Winsock1.RemoteHost = "127.0.0.1"
Winsock1.RemotePort = "1888"
Winsock1.Connect
End SubPrivate Sub Winsock1_Connect()
MsgBox ("已经连接上了")
MsgBox (Winsock1.State)
Winsock1.SendData "测试连接信息"
End SubPrivate Sub Winsock1_SendComplete()
MsgBox ("测试信息已经发送完毕")
End Sub
====================================
除以上代码再没有别的代码了,以上代码分别生成两个程序,点击客户端的Command1按钮时,先后弹出四个信息,内容为:
0
已经连接上
7
测试信息已经发送完毕请兄斧正。
'===== 服务器端 ======
Private Sub Form_Load()
Winsock1.LocalPort = "1888"
Winsock1.Listen
End SubPrivate Sub Form_Unload(Cancel As Integer)
Winsock1.Close
End SubPrivate Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
Winsock2.Close
Winsock2.Accept requestID
End Sub'====== 客户端 ======Private Sub Command1_Click()
If Winsock1.State <> 0 Then
Winsock1.Close
End If
MsgBox (Winsock1.State)
Winsock1.RemoteHost = "127.0.0.1"
Winsock1.RemotePort = "1888"
Winsock1.Connect
End SubPrivate Sub Winsock1_Connect()
MsgBox ("已经连接上了")
MsgBox (Winsock1.State)
Winsock1.SendData "测试连接信息"
End SubPrivate Sub Winsock1_SendComplete()
MsgBox ("测试信息已经发送完毕")
End Sub
'====================================
'除以上代码再没有别的代码了,以上代码分别生成两个程序,点击客户端的Command1按钮时,先后弹出四个信息,内容为:
0
已经连接上
7
测试信息已经发送完毕请兄斧正?
Winsock2.Close
Winsock2.Accept requestID
End Sub
你正常写法不会出错的,你非要错误的来,建议你去搞测试
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
End Sub
为什么中间在没有Accept语句的情况下,加上语句:MsgBox(Winsock1.RemoteHostIP),客户端的connect事件就被激活了,state为7?
你把MsgBox(Winsock1.RemoteHostIP) 换成 text1.text="sdfsadfa"看看是不是一样成功