Hallo.
Ich versuche grade Über TCP 2 Clients mit nem Server zu Verbinden.
Ich habe nun das Problem das wenn sie sich verbunden haben
das ich die die von den Client's per TCPRecv Daten nicht mehr beim Server ankommen.
Wenn ich zulasse das sich nur 1 Client verbinden kann funktioniert es.
Meine Server:
Spoiler anzeigen
/*Inculde*/
#include <GUIConstants.au3>
#include <GUIListView.au3>
#include <iNet.au3>
;/*Traymenu*/
TraySetClick(8)
TrayItemSetOnEvent(TrayCreateItem('Beenden'), '_close')
TraySetOnEvent(-7, "_restore")
;/*Deklaration*/
Global Const $TCP_IP = @IPAddress1
Global Const $TCP_PORT = 4851
Dim $ConnectedSocket = -1
Dim $incoming, $socketToIP
;/*GUI*/
$server = GUICreate('IMS', 200, 300, Default, Default, $WS_BORDER+$WS_SYSMENU)
$userList = GUICtrlCreateListView('a', 2, 2, 192, 272, $LVS_NOCOLUMNHEADER+$LVS_SINGLESEL)
_GUICtrlListViewSetColumnWidth($userList, 0, 180)
GUISetOnEvent($GUI_EVENT_CLOSE, '_minimize', $server)
GUISetState()
;/*TCP StartUP*/
TCPStartup()
$MAINSOCKET=TCPListen($TCP_IP, $TCP_PORT)
[/autoit] [autoit][/autoit] [autoit];/*Main While*/
While 1
;If $ConnectedSocket = -1 Then
Do
$ConnectedSocket=TCPAccept($MAINSOCKET)
$socketToIP = _SocketToIP($ConnectedSocket)
Until $ConnectedSocket <> -1
If $ConnectedSocket > 0 Then
GUICtrlCreateListViewItem(_TCPIpToName($socketToIP), $userList)
GUICtrlCreateListViewItem($ConnectedSocket, $userList)
EndIf
;
If $ConnectedSocket <= 0 Then
$ConnectedSocket = -1
EndIf
;EndIF
$incoming = TCPRecv($ConnectedSocket, 250)
If $incoming <> '' Then
GUICtrlCreateListViewItem($socketToIP & ' > ' & $incoming , $userList)
EndIf
Sleep(100)
WEnd
;/*Functions*/
Func _close()
TCPCloseSocket($ConnectedSocket)
TCPShutdown()
Exit
EndFunc
;//
Func _minimize()
GUISetState(@SW_HIDE, $server)
EndFunc
;//
Func _restore()
GUISetState(@SW_RESTORE, $server)
GUISetState(@SW_SHOW, $server)
EndFunc
;//
Func _SocketToIP($SHOCKET)
Local $sockaddr = DLLStructCreate("short;ushort;uint;char[8]")
Local $aRet = DLLCall("Ws2_32.dll","int","getpeername","int",$SHOCKET, _
"ptr",DLLStructGetPtr($sockaddr),"int_ptr",DLLStructGetSize($sockaddr))
If Not @error And $aRet[0] = 0 Then
$aRet = DLLCall("Ws2_32.dll","str","inet_ntoa","int",DLLStructGetData($sockaddr,3))
If Not @error Then $aRet = $aRet[0]
Else
$aRet = 0
EndIf
$sockaddr = 0
[/autoit] [autoit][/autoit] [autoit]Return $aRet
EndFunc
Was mache ich falsch bzw wie mache ich es richtig?