<?php$server = '127.0.0.1';
$port = 8888;$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if($socket < 0) {
echo socket_strerror($socket);
} else {
echo '成功<br />';
}
$result = @socket_connect($socket, $server, $port);$buf = '你好啊我';
$len = strlen($buf);socket_send($socket, $buf, $len, 0);socket_close($socket);?>
Option Explicit
Private Sub Form_Load()
    tcpServer.LocalPort = 8888
    tcpServer.Listen
    lblstate.Caption = "目前没有客户端连入!"
End SubPrivate Sub tcpServer_ConnectionRequest(ByVal requestID As Long)
    If tcpServer.State <> sckClosed Then tcpServer.Close
    tcpServer.Accept requestID
    lblstate.Caption = "有客户端连入本机! IP:" & tcpServer.RemoteHostIP
End SubPrivate Sub tcpServer_DataArrival(ByVal bytesTotal As Long)
    Dim strData As String
    tcpServer.GetData strData
    txtOutput.Text = strData & vbCrLf & txtOutput.Text
End Sub
Private Sub txtSendData_KeyPress(KeyAscii As Integer)
    If KeyAscii = 13 Then
        If tcpServer.State = sckConnected Then
            tcpServer.SendData "服务器说:" & txtSendData.Text
            txtOutput.Text = "服务器说" & txtSendData.Text & vbCrLf & txtOutput.Text
            txtSendData.Text = ""
        Else
            MsgBox "目前没有连接的客户端!"
        End If
    End If
End Sub第一次正常   但是  第二次刷新  PHP页面的时候出现 如下错误        Warning: socket_send() [function.socket-send]: unable to write to socket [0]: 由于套接字没有连接并且(当使用一个 sendto 调用发送数据报套接字时)没有提供地址,发送或接收数据的请求没有被接受。 in E:\wamp\www\test\test3.php on line 19有时候VB会出现这样的错误

解决方案 »

  1.   

    很显然,你这个服务端代码只能支持一个客户端连接一次,所以必然会出现这个结果,建议你还是另找个Winsock多客户端通讯方面的例子看看吧,不是一句两句能解释清楚的。
      

  2.   

    我觉得,应该是你的 PHP刷新时,它是把先的连接断开,重新创建连接的。
    而你的VB程序那儿,只支持一个连接;
      PHP刷新造成连接断开时,你的tcpServer并没有断开(VB端应该是不会接到通知的吧),因此不能接受新的连接请求。
      

  3.   

    Private Sub Form_Load()
        winsock1.LocalPort = 8888
        winsock1.Listen
    End SubPrivate Sub winsock1_ConnectionRequest(ByVal requestID As Long)
        If winsock1.State <> sckClosed Then winsock1.Close
            winsock1.Accept requestID
            Label1.Caption = "有客户端接入本机!IP:为" & winsock1.RemoteHostIPEnd SubPrivate Sub winsock1_DataArrival(ByVal bytesTotal As Long)
        Dim strData As String
        winsock1.GetData strData
        Text1.Text = strData
        winsock1.Close
    End Sub
    我已经增加了   close  但是好像还是不行
      

  4.   

    我的问题解决了 
    在 winsock1.Close 下面加了  重新监听 就行了
     
    winsock1.Listen
      

  5.   

    虽然加上Winsock1.Listen进行重新监听,但是依然只能接受一个客户端,如果再开个新页面马上就该出错了!