
<?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 Sub
Private Sub tcpServer_ConnectionRequest(ByVal requestID As Long)
If tcpServer.State <> sckClosed Then tcpServer.Close
tcpServer.Accept requestID
lblstate.Caption = "有客戶端連入本機! IP:" & tcpServer.RemoteHostIP
End Sub
Private 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會出現這樣的錯誤
uj5u.com熱心網友回復:
很顯然,你這個服務端代碼只能支持一個客戶端連接一次,所以必然會出現這個結果,建議你還是另找個Winsock多客戶端通訊方面的例子看看吧,不是一句兩句能解釋清楚的。uj5u.com熱心網友回復:
我覺得,應該是你的 PHP重繪時,它是把先的連接斷開,重新創建連接的。而你的VB程式那兒,只支持一個連接;
PHP重繪造成連接斷開時,你的tcpServer并沒有斷開(VB端應該是不會接到通知的吧),因此不能接受新的連接請求。
uj5u.com熱心網友回復:
Private Sub Form_Load()
winsock1.LocalPort = 8888
winsock1.Listen
End Sub
Private Sub winsock1_ConnectionRequest(ByVal requestID As Long)
If winsock1.State <> sckClosed Then winsock1.Close
winsock1.Accept requestID
Label1.Caption = "有客戶端接入本機!IP:為" & winsock1.RemoteHostIP
End Sub
Private Sub winsock1_DataArrival(ByVal bytesTotal As Long)
Dim strData As String
winsock1.GetData strData
Text1.Text = strData
winsock1.Close
End Sub
我已經增加了 close 但是好像還是不行
uj5u.com熱心網友回復:
我的問題解決了
在 winsock1.Close 下面加了 重新監聽 就行了
winsock1.Listen
uj5u.com熱心網友回復:
看來我還是猜對原因了。
uj5u.com熱心網友回復:
雖然加上Winsock1.Listen進行重新監聽,但是依然只能接受一個客戶端,如果再開個新頁面馬上就該出錯了!uj5u.com熱心網友回復:
他的設計,看樣子只能接受一個連接的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/136265.html
標籤:網絡編程
上一篇:vb webbrowser控制元件如何獲得當前打開網頁的全部原始碼?
下一篇:vb.net繪圖問題
