Я пытаюсь установить соединение между клиентской программой и серверной программой. Отправка данных с клиента на сервер отлично работает, но я не знаю, как я могу сразу отправить ответ от сервера клиенту. Например, в этом случае у меня есть программа для гостиницы, в которой хранятся все резервации (сервер) и клиентская программа, где люди могут искать свои оговорки. Клиентская программа отправляет идентификатор клиента на сервер и должна отправить обратно сериализованную Hashtable оговорках этого клиента.Как сделать ответ сервера после получения запроса/данных
Мой клиент код выглядит следующим образом:
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
const int POORT = 4001;
IPAddress ipaddress = IPAddress.Parse("127.0.0.1");
socket.Connect(new IPEndPoint(ipaddress, POORT));
using (NetworkStream ns = new NetworkStream(socket)) {
using (StreamWriter sw = new StreamWriter(ns)) {
sw.WriteLine(klantId);
sw.Flush();
}
}
socket.Shutdown(SocketShutdown.Both);
socket.Close();
Мой код сервера:
IPAddress ipaddress = IPAddress.Parse("127.0.0.1");
IPEndPoint ep = new IPEndPoint(ipaddress, 4001);
Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
serverSocket.Bind(ep);
serverSocket.Listen(50);
try {
string klantid;
while (true) {
using (Socket clientSocket = serverSocket.Accept()) {
using (NetworkStream ns = new NetworkStream(clientSocket)) {
using (StreamReader sr = new StreamReader(ns)) {
klantid = sr.ReadLine();
// Searches the reservations
Hashtable reservaties = hotel.ReservatiesZoeken(int.Parse(klantid));
// Tried this to send the data. Doesn't seem to work.
using (MemoryStream stream = new MemoryStream()) {
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, reservaties);
stream.Flush();
}
}
}
}
}
}
finally {
serverSocket.Shutdown(SocketShutdown.Both);
serverSocket.Close();
}
Я предполагаю, что я мог бы реализовать слушателя в клиенте и установить новое соединение с сервером клиенту , но я не мог не чувствовать, что можно отправить ответ по тому же соединению, что и запрос.
Вам действительно нужно идти на низкоуровневом уровне? Не можете ли вы использовать какую-то сервис-инфраструктуру, например? WCF или WebAPI, который делает все это для вас? – ChrFin
К сожалению, мне нужно, так как это проект для школы, чтобы практиковать связь между сервером и клиентом ... Это немного объясняется в наших учебниках, но не достаточно, и я не могу найти никаких ясных примеров в Интернете. – Dragorian