Gotenks666
Ensign
- Registriert
- Mai 2009
- Beiträge
- 165
Hallo Guten Tag,
ich suche schon seit ein paar Tagen nach einer Lösung und finde das Problem einfach nicht dazu.
Ich habe in Visual Basic.Net eine simple Server, Client Verbindung hergestellt die folgendermaßen aussieht:
[VB.NET]
Server:
Client:
Dieses funktioniert ohne Probleme. Da ich momentan dabei bin C# lernen und alles konvertiere auf C#, habe ich folgendes Problem mit dem Server.
[C#]
Server:
ServerTCP.CS
Sobald ich mit meinem konvertierten C# Client verbinde auf den C# Server zeigt Visual Studio mir folgenden Fehler:
Habe ich einen Fehler im Konkretisierung Prozess oder habe ich etwas vergessen warum Clients OutOfIndex ist?
Viel dank für die Hilfe! Hoffe ich konnte genug Info geben!
ich suche schon seit ein paar Tagen nach einer Lösung und finde das Problem einfach nicht dazu.
Ich habe in Visual Basic.Net eine simple Server, Client Verbindung hergestellt die folgendermaßen aussieht:
[VB.NET]
Server:
Code:
public Class Client
Public index As Integer
Public IP As String
Public Socket As TcpClient
Public myStream As NetworkStream
Public Closing As Boolean
Private readBuff As Byte()
Public Sub Start()
Socket.SendBufferSize = 4096
Socket.ReceiveBufferSize = 4096
myStream = Socket.GetStream()
ReDim readBuff(Socket.ReceiveBufferSize - 1)
myStream.BeginRead(readBuff, 0, Socket.ReceiveBufferSize, AddressOf OnReceiveData, Nothing)
Closing = False
End Sub
Private Sub OnReceiveData(ar As IAsyncResult)
Try
Dim readbytes As Integer = myStream.EndRead(ar)
If Socket Is Nothing Then Exit Sub
If (readbytes <= 0) Then
CloseSocket(index) 'Disconnect
Exit Sub
End If
Dim newBytes As Byte()
ReDim newBytes(readbytes - 1)
Buffer.BlockCopy(readBuff, 0, newBytes, 0, readbytes)
HandleData(index, newBytes)
If Socket Is Nothing Then Exit Sub
myStream.BeginRead(readBuff, 0, Socket.ReceiveBufferSize, AddressOf OnReceiveData, Nothing)
Catch ex As Exception
CloseSocket(index) 'Disconnect
Exit Sub
End Try
End Sub
End Class
Module ServerTCP
Public Clients() As Client
Public ServerSocket As TcpListener
Public Sub InitNetwork()
ServerSocket = New TcpListener(IPAddress.Any, 5555)
ServerSocket.Start()
ServerSocket.BeginAcceptTcpClient(AddressOf OnClientConnect, Nothing)
End Sub
Private Sub OnClientConnect(ar As IAsyncResult)
Dim client As TcpClient = ServerSocket.EndAcceptTcpClient(ar)
client.NoDelay = False
ServerSocket.BeginAcceptTcpClient(AddressOf OnClientConnect, Nothing)
For i = 1 To 100
If Clients(i).Socket Is Nothing Then
Clients(i).Socket = client
Clients(i).index = i
Clients(i).IP = DirectCast(client.Client.RemoteEndPoint, IPEndPoint).Address.ToString
Clients(i).Start()
TextAdd("Connection received from " & Clients(i).IP)
NeedToUpDatePlayerList = True
SendNews(i)
Exit For
End If
Next
End Sub
End Module
Client:
Code:
Public Sub Connect()
If Not PlayerSocket Is Nothing Then
Try
If PlayerSocket.Connected Or SckConnecting Then Exit Sub
PlayerSocket.Close()
PlayerSocket = Nothing
Catch ex As Exception
End Try
End If
PlayerSocket = New TcpClient()
PlayerSocket.ReceiveBufferSize = 4096
PlayerSocket.SendBufferSize = 4096
PlayerSocket.NoDelay = False
ReDim asyncBuff(8192)
PlayerSocket.BeginConnect(Options.IP, Options.Port, New AsyncCallback(AddressOf ConnectCallback), PlayerSocket)
SckConnecting = True
End Sub
Dieses funktioniert ohne Probleme. Da ich momentan dabei bin C# lernen und alles konvertiere auf C#, habe ich folgendes Problem mit dem Server.
[C#]
Server:
Code:
public class Client
{
public int index;
public string IP;
public TcpClient Socket;
public NetworkStream myStream;
public bool Closing;
private byte[] readBuff;
public void Start()
{
Socket.SendBufferSize = 4096;
Socket.ReceiveBufferSize = 4096;
myStream = Socket.GetStream();
readBuff = new byte[Socket.ReceiveBufferSize - 1 + 1];
myStream.BeginRead(readBuff, 0, Socket.ReceiveBufferSize, OnReceiveData, null);
Closing = false;
}
}
ServerTCP.CS
Code:
public class ServerTCP
{
public static Client[] Clients;
public static TcpListener ServerSocket;
public static void InitNetwork()
{
ServerSocket = new TcpListener(IPAddress.Any, 5555);
ServerSocket.Start();
ServerSocket.BeginAcceptTcpClient(OnClientConnect, null);
}
private static void OnClientConnect(IAsyncResult ar)
{
TcpClient client = ServerSocket.EndAcceptTcpClient(ar);
client.NoDelay = false;
ServerSocket.BeginAcceptTcpClient(OnClientConnect, null);
for (int i = 1; i <= 100; i++)
{
if (Clients[i].Socket == null)
{
Clients[i].Socket = client;
Clients[i].index = System.Convert.ToInt32(i);
Clients[i].IP = System.Convert.ToString(((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString());
Clients[i].Start();
Form1._Form1.AddText("Connection Received");
//NeedToUpDatePlayerList = true;
//SendNews(i);
break;
}
}
}
}
Sobald ich mit meinem konvertierten C# Client verbinde auf den C# Server zeigt Visual Studio mir folgenden Fehler:
Code:
if (Clients[i].Socket == null)
Der Index war außerhalb des Arraybereichs.
Habe ich einen Fehler im Konkretisierung Prozess oder habe ich etwas vergessen warum Clients OutOfIndex ist?
Viel dank für die Hilfe! Hoffe ich konnte genug Info geben!