Поэтому я написал код, чтобы я мог общаться с сервером и клиентом.
- Первый вопрос заключается в том, как сервер определяет, что он общается с реальным клиентом, а не с кем-то еще, кто использует порт. Я слышал, что браузеры проверяют серверы, используя хеширование SHA.
- Второй вопрос касается наилучшего способа отправки и получения данных в переменных, а также определения того, что есть что, потому что текущий метод разделения данных не кажется очень элегантным.
Код на стороне сервера для получения и отправки данных:
NetworkStream NetStream1 = TCPSocket.GetStream();
NetStream.Read(Buffer, 0, Buffer.Length);
ReceivedData = System.Text.Encoding.ASCII.GetString(Buffer);
string[] splitter = ReceivedData.Split('-');
Variable1 = splitter[0];
Variable2 = splitter[1];
//send response
SendBuffer = Encoding.ASCII.GetBytes(ResultINT1+"-"+ResultINT2);
NetStream.Write(SendBuffer, 0, SendBuffer.Length);
NetStream.Flush();
Код клиента для отправки и получения
NetworkStream SendStream = ClientSocket.GetStream();
byte[] SendBuffer = System.Text.Encoding.ASCII.GetBytes(V1+"-"+V2);
SendStream.Write(SendBuffer, 0, SendBuffer.Length);
SendStream.Flush();
//response
SendStream.Read(RecieveBuffer, 0, RecieveBuffer.Length);
string ResultString = System.Text.Encoding.ASCII.GetString(RecieveBuffer);
string[] splitted = ResultString.Split('-');
int R1 = Convert.ToInt32(splitted[0]);
int R2 = Convert.ToInt16(splitted[1]);
ReceiveBuffer
(вы игнорируете возвращаемое значение изRead
, которое могло бы сообщить вам), поэтому небезопасно преобразовывать весь буфер в строку. Нет никакой гарантии, что вызовыWrite
на одном конце совпадают с вызовамиRead
на другом. - person Damien_The_Unbeliever   schedule 25.08.2016