logo search
Лекции по ая

Создание простого клиент-серверного приложения используя сокеты

У нас будут два различных приложения, приложение Сервер и приложение Клиент. Приложение Сервер будет соединяться с портом и в режиме прослушивания ожидать подключения Клиента. Как только Клиент подсоединиться он пошлет тестовое сообщение Серверу. Этот текст затем будет отображен в консоли приложения Сервера.

Вот исходный код приложения Сервера.

using System;

using System.Text;

using System.Net;

using System.Net.Sockets;

using System.IO;

class SocketServer

{

public static void Main()

{

StreamWriter streamWriter;

StreamReader streamReader;

NetworkStream networkStream;

TcpListener tcpListener = new TcpListener(5555);

tcpListener.Start();

Console.WriteLine("The Server has started on port 5555");

Socket serverSocket = tcpListener.AcceptSocket();

try

{

if (serverSocket.Connected)

{

while (true)

{

Console.WriteLine("Client connected");

networkStream = new NetworkStream(serverSocket);

streamWriter = new StreamWriter(networkStream);

streamReader = new StreamReader(networkStream);

Console.WriteLine(streamReader.ReadLine());

}

}

if (serverSocket.Connected)

serverSocket.Close();

Console.Read();

}

catch (SocketException ex)

{

Console.WriteLine(ex);

}

}

}

Приложение сервер стартует на порте 5555, отображает соответствующее сообщение и ждет входящего запроса на подсоединение от Клиента. Как только Клиент устанавливает соединение на тот же порт, сообщение "Client connected" отображается на консоли.

Рассмотрим на исходный код приложения Клиента, который будет подсоединяться к приложению Сервера используя тот же порт т.е. 5555.

using System;

using System.Text;

using System.Net;

using System.Net.Sockets;

using System.IO;

class SocketClient

{

static void Main(string[] args)

{

TcpClient tcpClient;

NetworkStream networkStream;

StreamReader streamReader;

StreamWriter streamWriter;

try

{

tcpClient = new TcpClient("localhost", 5555);

networkStream = tcpClient.GetStream();

streamReader = new StreamReader(networkStream);

streamWriter = new StreamWriter(networkStream);

streamWriter.WriteLine("Message from the Client...");

streamWriter.Flush();

}

catch (SocketException ex)

{

Console.WriteLine(ex);

}

Console.Read();

}

}

И в клиенте и в сервере используются потоки. Поток networkStream принимает или передает данные из сети или в сеть. Данный поток ассоциируется с потоком streamReader или streamWriter для получения или передачи сообщений по сети.