TryCatchNetworkFix

This commit is contained in:
AnloGames 2023-08-17 13:05:43 +03:00
parent ccc6937ac9
commit 62a32ccdce

View file

@ -21,20 +21,27 @@ namespace DangerousD.GameCore.Network
private void Init(string IpAddress) private void Init(string IpAddress)
{ {
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); try
IPAddress address = IPAddress.Parse(IpAddress); {
int port = 8000; socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
endPoint = new IPEndPoint(address, port); IPAddress address = IPAddress.Parse(IpAddress);
int port = 8000;
endPoint = new IPEndPoint(address, port);
}
catch { }
} }
private void AcceptSockets() private void AcceptSockets()
{ {
while (true) while (true)
{ {
Socket clientSocket = socket.Accept(); try
clientSockets.Add(clientSocket); {
Thread receiveThread = new Thread(BeginHostReceive); Socket clientSocket = socket.Accept();
receiveThread.Start(clientSocket); clientSockets.Add(clientSocket);
Console.WriteLine("Connected"); Thread receiveThread = new Thread(BeginHostReceive);
receiveThread.Start(clientSocket);
}
catch { }
} }
} }
@ -43,31 +50,42 @@ namespace DangerousD.GameCore.Network
Socket clientSocket = clSocket as Socket; Socket clientSocket = clSocket as Socket;
while (clientSocket != null) while (clientSocket != null)
{ {
byte[] bytesCount = new byte[4]; try
clientSocket.Receive(bytesCount); {
byte[] Data = new byte[BitConverter.ToInt32(bytesCount)]; byte[] bytesCount = new byte[4];
StateObject so = new StateObject(clientSocket, Data); clientSocket.Receive(bytesCount);
IAsyncResult count = clientSocket.BeginReceive(so.buffer, 0, so.bufferSize, SocketFlags.None, AsyncReceiveCallback, so); byte[] Data = new byte[BitConverter.ToInt32(bytesCount)];
StateObject so = new StateObject(clientSocket, Data);
IAsyncResult count = clientSocket.BeginReceive(so.buffer, 0, so.bufferSize, SocketFlags.None, AsyncReceiveCallback, so);
}
catch { }
} }
} }
public void HostInit(string IpAddress) public void HostInit(string IpAddress)
{ {
Init(IpAddress); try
socket.Bind(endPoint); {
socket.Listen(4); Init(IpAddress);
Thread acceptThread = new Thread(AcceptSockets); socket.Bind(endPoint);
acceptThread.Start(); socket.Listen(4);
state = "Host"; Thread acceptThread = new Thread(AcceptSockets);
Console.WriteLine("Start Accept"); acceptThread.Start();
state = "Host";
}
catch { }
} }
public void ClientInit(string IpAddress) public void ClientInit(string IpAddress)
{ {
Init(IpAddress); try
socket.Connect(endPoint); {
state = "Client"; Init(IpAddress);
Thread.Sleep(10); socket.Connect(endPoint);
Thread ReceivingThread = new Thread(ReceiveMsgFromHost); state = "Client";
ReceivingThread.Start(); Thread.Sleep(10);
Thread ReceivingThread = new Thread(ReceiveMsgFromHost);
ReceivingThread.Start();
}
catch { }
} }
public void SendMsg(NetworkTask networkTask) public void SendMsg(NetworkTask networkTask)
{ {
@ -75,45 +93,61 @@ namespace DangerousD.GameCore.Network
int count = Data.Length; int count = Data.Length;
if (state == "Host") if (state == "Host")
{ {
foreach (Socket socket in clientSockets) try
{
foreach (Socket socket in clientSockets)
{
socket.Send(BitConverter.GetBytes(count));
socket.Send(Data);
}
}
catch { }
}
else
{
try
{ {
socket.Send(BitConverter.GetBytes(count)); socket.Send(BitConverter.GetBytes(count));
socket.Send(Data); socket.Send(Data);
} }
} catch { }
else
{
socket.Send(BitConverter.GetBytes(count));
socket.Send(Data);
} }
} }
private void ReceiveMsgFromHost() private void ReceiveMsgFromHost()
{ {
while (true) while (true)
{ {
byte[] bytesCount = new byte[4]; try
socket.Receive(bytesCount); {
byte[] Data = new byte[BitConverter.ToInt32(bytesCount)]; byte[] bytesCount = new byte[4];
StateObject so = new StateObject(socket, Data); socket.Receive(bytesCount);
IAsyncResult count = socket.BeginReceive(so.buffer, 0, so.bufferSize, SocketFlags.None, AsyncReceiveCallback, so); byte[] Data = new byte[BitConverter.ToInt32(bytesCount)];
StateObject so = new StateObject(socket, Data);
IAsyncResult count = socket.BeginReceive(so.buffer, 0, so.bufferSize, SocketFlags.None, AsyncReceiveCallback, so);
}
catch { }
} }
} }
private void AsyncReceiveCallback(IAsyncResult ar) private void AsyncReceiveCallback(IAsyncResult ar)
{ {
StateObject so = ar.AsyncState as StateObject; try
Socket clientSocket = so.workSocket;
int readCount = clientSocket.EndReceive(ar);
so.UploadedBytesCount += readCount;
so.sb.Append(Encoding.Unicode.GetString(so.buffer, 0, readCount));
if (so.UploadedBytesCount < so.bufferSize)
{ {
clientSocket.BeginReceive(so.buffer, 0, so.bufferSize, SocketFlags.None, new AsyncCallback(AsyncReceiveCallback), so); StateObject so = ar.AsyncState as StateObject;
} Socket clientSocket = so.workSocket;
else int readCount = clientSocket.EndReceive(ar);
{ so.UploadedBytesCount += readCount;
GetReceivingMessages(JsonConvert.DeserializeObject<NetworkTask>(so.sb.ToString())); so.sb.Append(Encoding.Unicode.GetString(so.buffer, 0, readCount));
if (so.UploadedBytesCount < so.bufferSize)
{
clientSocket.BeginReceive(so.buffer, 0, so.bufferSize, SocketFlags.None, new AsyncCallback(AsyncReceiveCallback), so);
}
else
{
GetReceivingMessages(JsonConvert.DeserializeObject<NetworkTask>(so.sb.ToString()));
}
} }
catch { }
} }
} }
} }