У меня есть серверное приложение и клиентское приложение с уже работающим функционалом. Позвольте мне показать вам, как я подключаю свое клиентское приложение к своему серверному приложению:
//SERVER
// instantiate variables such as tempIp, port etc...
// ...
// ...
server = new TcpListener(tempIp, port); //tempIp is the ip address of the server.
// Start listening for client requests.
server.Start();
// Buffer for reading data
Byte[] bytes = new Byte[MaxChunkSize];
String data = null;
// Enter the listening loop.
while (disconect == false)
{
Console.Write("Waiting for a connection... ");
// Perform a blocking call to accept requests.
// You could also user server.AcceptSocket() here.
client = server.AcceptTcpClient(); // wait until a client get's connected...
Console.WriteLine("Connected!");
// Get a stream object for reading and writing
stream = client.GetStream();
// now that the connection is established start listening though data
// sent through the stream..
int i;
try
{
// Loop to receive all the data sent by the client.
while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
{
// Translate data bytes to a ASCII string.
data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
Console.WriteLine("Received: {0}", data);
// etc..
....
Хорошо, теперь на стороне клиента, скажем, я хочу установить соединение, а затем отправить некоторые данные через поток
//Client
client = new TcpClient(serverIP, port);
// Get a client stream for reading and writing.
stream = client.GetStream();
//then if I wish to send the string hello world to the server I would do:
sendString(stream, "Hello world");
protected void sendString(NetworkStream stream, string str)
{
sendBytes(stream, textToBytes(str));
}
protected void sendBytes(NetworkStream stream, Byte[] data)
{
// Send the message to the connected TcpServer.
stream.Write(data, 0, data.Length);
}
protected static Byte[] textToBytes(string text)
{
return System.Text.Encoding.ASCII.GetBytes(text);
}
так как я могу отправлять байты, я могу отправлять файлы или все, что я хочу. Техника, которую я использую, заключается в том, что если я отправлю строковый файл, например, на сервер, то сервер начнет прослушивать файл. Он откроет поток и запишет полученные байты в этот файл. Если отправлено другое ключевое слово, сервер начнет прослушивание другим методом и т. Д.
Так что при работе с одним сервером и одним клиентом все работает отлично. Теперь я хочу добавить больше клиентов и мне нужно, чтобы они также подключались к серверу. Я знаю, что несколько соединений могут быть установлены на один и тот же порт, как мы делаем это с портом 80 на веб-сайтах ... Я не знаю, как управлять несколькими соединениями поэтому я думал о том, чтобы оставить все как есть. если соединение установлено, то скажите серверу запустить другой поток, прослушивающий другие соединения на том же порту. с помощью этой техники у меня будет запущено несколько потоков, и я просто знаю основы многопоточности. Если этот метод - мой лучший вариант, я начну его применять. Вы, ребята, действительно хорошо осведомлены обо всем этом, поэтому было бы хорошо, если бы кто-то указал мне верное направление. Или, может быть, я должен слушать несколько портов. например, если сервер уже подключен к порту 7777, не принимайте подключения с этого порта и, например, начните прослушивать порт 7778. Я имею в виду, что может быть так много разных способов достижения того, что мне нужно, и вы, ребята, наверняка знаете лучший способ. Я просто знаю основы работы в сети ...