Я пытаюсь отправить данные на свой сервер и получить их на другой стороне, но кажется, что я не могу передать данные
Это мой код на стороне клиента:
public void SendMessage(string MessageToSend)
{
MessageToSend += "#-*!!|#";
byte[] buffer = Encoding.ASCII.GetBytes(MessageToSend);
clientSocket.BeginSend(buffer, 0, buffer.Length, 0, new AsyncCallback(SendCallback), clientSocket);
}
private void SendCallback(IAsyncResult ar)
{
Socket client = (Socket)ar.AsyncState;
int bytesSent = client.EndSend(ar);
Console.WriteLine("Sent {0} bytes to server.", bytesSent);
}
и вот мой сервер
private void ReceiveCallBack(IAsyncResult ar)
{
StateObject state = (StateObject)ar.AsyncState;
int received = state.workSocket.EndReceive(ar);
if (received > 0)
{
state.sb.Append(Encoding.ASCII.GetString(state.buffer, 0, received));
content = state.sb.ToString();
Console.WriteLine("RECEIVED : " + Encoding.UTF8.GetString(state.buffer, 0, received));
if (content.IndexOf("#-*!!|#") != -1)
{ StaticVariables.ReqHandler.Requests.Add(content.Substring(0, content.Length - 7));
state.workSocket.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReceiveCallBack), state);
state.sb.Clear();
return;
}
else
{
state.workSocket.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReceiveCallBack), state);
}
}
}
Проблема в том, что я никогда не смогу войти в этот блок, который я смотрю, если входящее сообщение сделано или нет .. Может кто-нибудь показать мне, где я совершил ошибку?
Обновление: когда я использую точку останова и проверяю переменную "content", я вижу много \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 и иду на пустую, когда выгляжу нормально, может ли это быть из-за моего размер буфера или что-то о кодировке?
Обновление 2: я только что понял, когда я иду с точками останова на этой строке
state.sb.Append(Encoding.UTF8.GetString(state.buffer, 0, received));
мой state.buffer полностью пуст. Я напишу начало моего кода и как я буду называть «ReceiveCallBack». Может быть, я что-то не так делаю в предыдущей части кода.
public void StartServer()
{
serverSocket.Bind(new IPEndPoint(IPAddress.Any, port));
serverSocket.Listen(10);
serverSocket.BeginAccept(new AsyncCallback(AcceptCallBack), null);
}
private void AcceptCallBack(IAsyncResult ar)
{
Socket socket = serverSocket.EndAccept(ar);
clientSockets.Add(socket);
StateObject State = new StateObject();
State.workSocket = socket;
socket.BeginReceive(buffer, 0, buffer.Length, 0, new AsyncCallback(ReceiveCallBack), State);
serverSocket.BeginAccept(new AsyncCallback(AcceptCallBack), null);
}
Вот так я запускаю свой сервер. Я использую это для вызова StartServer
StaticVariables.SocketObject = new SocketConnection();
Thread ServerThread = new Thread(() => StaticVariables.SocketObject.StartServer());
ServerThread.Start();