VB 和 PHP SOCKET 通信问题 请各位帮忙看看

[复制链接]
查看11 | 回复7 | 2021-1-27 07:11:35 | 显示全部楼层 |阅读模式




OptionExplicit

PrivateSubForm_Load()
tcpServer.LocalPort=8888
tcpServer.Listen
lblstate.Caption="目前没有客户端连入!"
EndSub
PrivateSubtcpServer_ConnectionRequest(ByValrequestIDAsLong)
IftcpServer.StatesckClosedThentcpServer.Close
tcpServer.AcceptrequestID
lblstate.Caption="有客户端连入本机!IP:"&tcpServer.RemoteHostIP
EndSub
PrivateSubtcpServer_DataArrival(ByValbytesTotalAsLong)
DimstrDataAsString
tcpServer.GetDatastrData
txtOutput.Text=strData&vbCrLf&txtOutput.Text
EndSub

PrivateSubtxtSendData_KeyPress(KeyAsciiAsInteger)
IfKeyAscii=13Then
IftcpServer.State=sckConnectedThen
tcpServer.SendData"服务器说:"&txtSendData.Text
txtOutput.Text="服务器说"&txtSendData.Text&vbCrLf&txtOutput.Text
txtSendData.Text=""
Else
MsgBox"目前没有连接的客户端!"
EndIf
EndIf
EndSub



第一次正常但是第二次刷新PHP页面的时候出现如下错误Warning:socket_send()[function.socket-send]:unabletowritetosocket[0]:由于套接字没有连接并且(当使用一个sendto调用发送数据报套接字时)没有提供地址,发送或接收数据的请求没有被接受。inE:\wamp\www\test\test3.phponline19
有时候VB会出现这样的错误


分 -->
回复

使用道具 举报

千问 | 2021-1-27 07:11:35 | 显示全部楼层
很显然,你这个服务端代码只能支持一个客户端连接一次,所以必然会出现这个结果,建议你还是另找个Winsock多客户端通讯方面的例子看看吧,不是一句两句能解释清楚的。
回复

使用道具 举报

千问 | 2021-1-27 07:11:35 | 显示全部楼层
我觉得,应该是你的PHP刷新时,它是把先的连接断开,重新创建连接的。
而你的VB程序那儿,只支持一个连接;
  PHP刷新造成连接断开时,你的tcpServer并没有断开(VB端应该是不会接到通知的吧),因此不能接受新的连接请求。

回复

使用道具 举报

千问 | 2021-1-27 07:11:35 | 显示全部楼层
引用2楼Chen8013的回复:我觉得,应该是你的PHP刷新时,它是把先的连接断开,重新创建连接的。
而你的VB程序那儿,只支持一个连接;
  PHP刷新造成连接断开时,你的tcpServer并没有断开(VB端应该是不会接到通知的吧),因此不能接受新的连接请求。


PrivateSubForm_Load()
winsock1.LocalPort=8888
winsock1.Listen
EndSub
PrivateSubwinsock1_ConnectionRequest(ByValrequestIDAsLong)
Ifwinsock1.StatesckClosedThenwinsock1.Close
winsock1.AcceptrequestID
Label1.Caption="有客户端接入本机!IP:为"&winsock1.RemoteHostIP
EndSub
PrivateSubwinsock1_DataArrival(ByValbytesTotalAsLong)
DimstrDataAsString
winsock1.GetDatastrData
Text1.Text=strData
winsock1.Close
EndSub

我已经增加了close但是好像还是不行
回复

使用道具 举报

千问 | 2021-1-27 07:11:35 | 显示全部楼层
引用1楼CityBird的回复:很显然,你这个服务端代码只能支持一个客户端连接一次,所以必然会出现这个结果,建议你还是另找个Winsock多客户端通讯方面的例子看看吧,不是一句两句能解释清楚的。
引用2楼Chen8013的回复:我觉得,应该是你的PHP刷新时,它是把先的连接断开,重新创建连接的。
而你的VB程序那儿,只支持一个连接;
  PHP刷新造成连接断开时,你的tcpServer并没有断开(VB端应该是不会接到通知的吧),因此不能接受新的连接请求。


我的问题解决了

在winsock1.Close下面加了重新监听就行了
winsock1.Listen
回复

使用道具 举报

千问 | 2021-1-27 07:11:35 | 显示全部楼层
看来我还是猜对原因了。


回复

使用道具 举报

千问 | 2021-1-27 07:11:35 | 显示全部楼层
虽然加上Winsock1.Listen进行重新监听,但是依然只能接受一个客户端,如果再开个新页面马上就该出错了!
回复

使用道具 举报

千问 | 2021-1-27 07:11:35 | 显示全部楼层
引用6楼CityBird的回复:虽然加上Winsock1.Listen进行重新监听,但是依然只能接受一个客户端,如果再开个新页面马上就该出错了!
他的设计,看样子只能接受一个连接的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行