Salut, alors que je recommencer la partie mitm de mon bot en asynchrome je bloque sur un problélme, mes 2 client son connecter (un au client d2 et un au server d2) mais je recoit que le packet 1 et apres plus rien (sauf des fois un latancystatsmessage ou un truque comme ca) je voie vraiment pas d'ou ca vien voila ma class client
public class Client
{
private Socket ClientSocket;
private byte[] buffer;
private int bufferLength;
public event EventHandler<DataReceivedEventArgs> DataReceived;
private void OnDataReceived(DataReceivedEventArgs e)
{
if (DataReceived != null)
DataReceived(this, e);
}
public Client(Socket socket)
{
ClientSocket = socket;
bufferLength = 256;
buffer = new byte[bufferLength];
ClientSocket.BeginReceive(buffer, 0, bufferLength, SocketFlags.None, new AsyncCallback(ReceiveCallBack), ClientSocket);
}
public Client(IPEndPoint ipendpoint)
{
ClientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
ClientSocket.BeginConnect(ipendpoint, new AsyncCallback(ConnectCallBack), ClientSocket);
}
private void ConnectCallBack(IAsyncResult asyncResult)
{
ClientSocket = (Socket)asyncResult.AsyncState;
ClientSocket.EndConnect(asyncResult);
bufferLength = 256;
buffer = new byte[bufferLength];
ClientSocket.BeginReceive(buffer, 0, bufferLength, SocketFlags.None, new AsyncCallback(ReceiveCallBack), ClientSocket);
Console.WriteLine("Client connecter");
}
private void ReceiveCallBack(IAsyncResult asyncResult)
{
int byteToRead = ClientSocket.EndReceive(asyncResult);
OnDataReceived(new DataReceivedEventArgs(buffer));
}
public void Send(byte[] data)
{
ClientSocket.BeginSend(data, 0, data.Length, SocketFlags.None, new AsyncCallback(SendCallBack), ClientSocket);
}
private void SendCallBack(IAsyncResult asyncResult)
{
SocketError errorCode;
int byteSended = ClientSocket.EndSend(asyncResult,out errorCode);
if (errorCode != SocketError.Success)
{
}
}
}
public class DataReceivedEventArgs : EventArgs
{
public byte[] Data { get; private set; }
public DataReceivedEventArgs(byte[] data)
{
Data = data;
}
}
et me module qui fait fonctionner ca
using OverBand.Common.IO;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Server
{
static class Program
{
private static Server server;
private static Client SourceClient, DestinationClient;
[STAThread]
static void Main()
{
server = new Server();
server.Listen(5555);
server.ConnectionAccepted += server_ConnectionAccepted;
Console.ReadLine();
}
static void server_ConnectionAccepted(object sender, ConnectionAcceptedEventArgs e)
{
Console.WriteLine("Client accepter");
SourceClient = new Client(e.Client);
SourceClient.DataReceived += newClient_DataReceived;
DestinationClient = new Client(new System.Net.IPEndPoint(IPAddress.Parse("213.248.126.39"), 5555));
DestinationClient.DataReceived += DestinationClient_DataReceived;
}
static void DestinationClient_DataReceived(object sender, DataReceivedEventArgs e)
{
ParseData(e.Data);
SourceClient.Send(e.Data);
}
static void newClient_DataReceived(object sender, DataReceivedEventArgs e)
{
ParseData(e.Data);
DestinationClient.Send(e.Data);
}
static void ParseData(byte[] data)
{
FastBigEndianReader reader = new FastBigEndianReader(data);
uint header = reader.ReadUShort();
uint messageId = (uint)header >> 2;
int messageLength;
switch (header & 3)
{
case 1:
messageLength = (int)reader.ReadByte();
break;
case 2:
messageLength = (int)reader.ReadUShort();
break;
case 3:
messageLength = (int)(reader.ReadByte() << 16) + (reader.ReadByte() << 8) + reader.ReadByte();
break;
default:
messageLength = (int)0;
break;
}
byte[] messageData = reader.ReadBytes(messageLength);
Console.WriteLine("Packet : ID = {0} , Length = {1}", messageId.ToString(), messageLength.ToString());
}
}
}
class server
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
namespace Server
{
public class Server
{
#region Declarations
public Socket SocketServer;
#endregion
#region Event
public event EventHandler<ConnectionAcceptedEventArgs> ConnectionAccepted;
private void OnConnectionAccepted(ConnectionAcceptedEventArgs e)
{
if (ConnectionAccepted != null)
ConnectionAccepted(this, e);
}
#endregion
#region Metode public
public Server()
{
SocketServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
}
public void Listen(short port)
{
SocketServer.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), port));
SocketServer.Listen(2);
SocketServer.BeginAccept(new AsyncCallback(this.connexionAcceptCallback), SocketServer);
}
#endregion
#region Metode privée
private void connexionAcceptCallback(IAsyncResult asyncResult)
{
OnConnectionAccepted(new ConnectionAcceptedEventArgs(SocketServer.EndAccept(asyncResult)));
}
#endregion
}
public class ConnectionAcceptedEventArgs : EventArgs
{
public Socket Client { get; private set; }
public ConnectionAcceptedEventArgs(Socket client)
{
Client = client;
}
}
}
franchement je vois pas du tout d'ou ca vien oO, surment pas du parsing vue que je recoit et envoi les donnée en brutte sa doit venir de ma class client mai je trouve pas :3
j'ais lue sur d'autre post que des fois les client asynchrome bugger avec les packet en plusieur partie mais je crois pas que c'est ca ,alor si vous aver une idée je suis preneur ! merci d'avance