Member 13423970 Ответов: 1

Как отправить данные с клиента на сервер и чем с сервера на клиент C#


Привет,

Я хотел бы спросить, как кодировать, когда я хочу отправить запрос на сервер от клиента, и чем сервер отправляет мне ответ. Я пытался отправить сообщение от клиента, например "Привет", и сервер получает его, а затем сервер отправляет то же самое сообщение клиенту. Вы знаете, как это сделать?

Что я уже пробовал:

Сервер

IPAddress ip = Dns.GetHostEntry("localhost").AddressList[0];            
            TcpListener server = new TcpListener(ip, 8080);
            TcpClient client = default(TcpClient);

            try
            {
                server.Start();
                Console.WriteLine("Server started...");
                //Console.Read();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                //Console.Read();
            }            

            //while (true)
            //{
                client = server.AcceptTcpClient();

                byte[] buffer = new byte[100];
                NetworkStream stream = client.GetStream();

                stream.Read(buffer, 0, buffer.Length);

                string msg = Encoding.Default.GetString(buffer);

                msg += "Ano";

            //StringBuilder msg = new StringBuilder();

            //foreach (byte b in buffer)
            //{
            //    if (b.Equals(00))
            //    {
            //        break;
            //    }
            //    else
            //        msg.Append(Convert.ToChar(b).ToString());
            //}


            IPEndPoint ipClient = new IPEndPoint(IPAddress.Any, 8080);
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            socket.Bind(ipClient);
            socket.Listen(10);
            Console.WriteLine("Waiting for a client...");
            Socket clientClient = socket.Accept();
            IPEndPoint clientep = (IPEndPoint)clientClient.RemoteEndPoint;
            Console.WriteLine("Connected with {0} at port {1}", clientep.Address, clientep.Port);

            string welcome = "Welcome";
            byte[] data = new byte[1024];
            data = Encoding.ASCII.GetBytes(welcome);
            clientClient.Send(data, data.Length, SocketFlags.None);

            Console.WriteLine("Disconnected from {0}", clientep.Address);
            client.Close();
            socket.Close();


Клиент

TcpClient client = new TcpClient(serverIP, port);

            int byteCount = Encoding.ASCII.GetByteCount(textBoxMessage.Text);

            byte[] sendData = new byte[byteCount];

            sendData = Encoding.ASCII.GetBytes(textBoxMessage.Text);

            NetworkStream stream = client.GetStream();

            stream.Write(sendData, 0, sendData.Length);

            IPEndPoint ip = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9999);

            Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            try
            {
                server.Connect(ip);
            }
            catch (SocketException ex)
            {
               
                return;
            }

            byte[] data = new byte[1024];
            int receivedDataLength = server.Receive(data);
            string stringData = Encoding.ASCII.GetString(data, 0, receivedDataLength);
            label1.Text = stringData;

            stream.Close();
            client.Close();

1 Ответов

Рейтинг:
12

Afzaal Ahmad Zeeshan

Вы делаете это правильно, то, что вам нужно добавить здесь, - это своего рода промежуточное программное обеспечение, которое принимает это вопрос и генерирует ответ для этого. Поскольку вы не поделились никакой дополнительной информацией, нам очень трудно ответить. Но это будет что - то вроде этого,

stream.Read(buffer, 0, buffer.Length);
 
string question = Encoding.Default.GetString(buffer);

// Your middleware generates the answer
var answer = Middleware.GenerateAnswer(question);

// Send the answer to the client. 

Это может быть что угодно, простой класс, который принимает входные данные, обрабатывает их и генерирует некоторый ответ. Я могу написать это так,
public class Middleware {
    public static string GenerateAnswer(string question) {
        if(question == "How are you?") {
            return "I am fine, what about you?";
        }
        // ... else
    }
}

Конечно, это становится намного сложнее со сложными вопросами и сложными сленговыми высказываниями, и именно здесь вам нужно обсудить, как двигаться вперед.

Вы можете попробовать некоторые библиотеки, если хотите, для НЛП; SyntaxNet |  TensorFlow[^]