Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# для начинающих

Войти
Регистрация
Восстановить пароль
 
dj_vadim2
0 / 0 / 0
Регистрация: 28.03.2013
Сообщений: 70
#1

Клиент Сервер на C# найти ошибку в коде - C#

24.04.2013, 20:16. Просмотров 1088. Ответов 10
Метки нет (Все метки)

Доброго времени суток)
Этот код уже обсуждался на форуме года два назад. Мне нужно сделать самый простой клиент и сервер на C#, код есть, но в коде клиента ошибка, а я не могу понять какая..
Сервер:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
 
namespace server
{
    class Program
    {
        static void Main(string[] args)
        {
            Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //Создаем основной сокет
            IPAddress ipAddress = null; //IP-адресс
            IPEndPoint Addr = null; //конечная точка(IP и порт)
            Addr = new IPEndPoint(IPAddress.Any, 5300); //"localhost" = 127.0.0.1
            s.Bind(Addr); //"Адресуем" сокет
            s.Listen(10); //Обозначаем количество ожидающих в очереди на подключение
            Console.WriteLine("Ждем коннекта...");
            Socket cl_s = s.Accept(); //Ожидаем подключения
            Console.WriteLine("Есть коннект!");
            while (!Console.KeyAvailable) //Пока не нажата клавиша
            {
                byte[] msg = new byte[cl_s.Available];
                cl_s.Receive(msg); //Принимаем МСГ
                Console.WriteLine(Encoding.UTF8.GetString(msg)); //Конвертируем и выводим
            }
            cl_s.Close(); //Закрываем сокет
        }
    }
}
Клиент: (ошибка в нём)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
 
namespace client
{
    class Program
    {
        static void Main(string[] args)
        {
            Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //Создаем основной сокет
            IPAddress ipAddress = null; //IP-адресс
            IPEndPoint Addr = null; //конечная точка(IP и порт)
                    Console.Title = "Client"; //Клиент
                    ipAddress = Dns.GetHostEntry("localhost").AddressList[0];
                    Addr = new IPEndPoint(IPAddress.Any, 5300); //"localhost" = 127.0.0.1
                    s.Connect(Addr); //Коннектимся к срверу
                    while (true) //Вечная истина :)
                    {
                        byte[] msg = Encoding.UTF8.GetBytes(Console.ReadLine()); //Конвертируем
                        s.Send(msg); //Отправляем
                    }
                    //break;
            
            s.Close(); //Закрываем сокет
            Console.ReadKey();
        }
    }
}
Компилятор ругается: Необработанное исключение типа "System.Net.Sockets.SocketException" произошло в System.dll

Дополнительные сведения: Требуемый адрес для своего контекста неверен

и показывает на строку s.Connect(Addr); //Коннектимся к срверу

Помогите найти и исправить ошибку.

Добавлено через 30 минут
глупая ошибка Addr = new IPEndPoint(ipAddress, 5300);

Добавлено через 11 секунд
глупая ошибка Addr = new IPEndPoint(ipAddress, 5300);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.04.2013, 20:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Клиент Сервер на C# найти ошибку в коде (C#):

Найти ошибку, в приложении клиент-сервер - C#
Здравствуйте! Помогите найти ошибку, в приложении клиент сервер!

Найти ошибку в коде - C#
Здравствуйте. у меня такой код... string path; private void Button_Click(object sender, RoutedEventArgs e) { ...

Найти ошибку в коде - C#
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace...

Найти ошибку в коде - C#
Пытался реализовать класс очередь. В итоге вылетает какой-то индекс. Не могу найти в чем проблема. using System; namespace queue111 ...

Найти ошибку в коде - C#
Добрый день всем у меня студия 2012 показывает вот такую ошибкуошибку: Ошибка 1 Ожидался символ ";" C:\Users\Irina\documents\visual...

Найти ошибку в коде - C#
выводит ошибку помогите пожалуйста не пойму что ему надо public sealed partial class MainPage : Page { string text; ...

10
eagl69
4 / 9 / 1
Регистрация: 12.10.2011
Сообщений: 498
25.04.2013, 08:00 #2
Написал.. потом увидел что сам разобрался? .. и что получилось?
0
dj_vadim2
0 / 0 / 0
Регистрация: 28.03.2013
Сообщений: 70
25.04.2013, 09:44  [ТС] #3
да, разобрался) но потом появилась задача сделать следующее, чтобы когда чел подключится к серверу то сервер ему отошлёт сообщение на консоль типа "Я сервер и я готов слушать твои команды..", а это не получилось сделать... да и проверки не мешало бы сделать чтоб ошибок не было..
0
eagl69
4 / 9 / 1
Регистрация: 12.10.2011
Сообщений: 498
25.04.2013, 11:38 #4
Клиент высылает сообщение что он подключился.. сервер отвечает.....
//прослушивание порта и ожидание подключения
TcpClient client = server.AcceptTcpClient();
data = null;
//произошло подключение, создается поток сообщений
NetworkStream stream = client.GetStream();
// чтение сообщения
int i = stream.Read(bytes, 0, bytes.Length);
data = System.Text.Encoding.UTF8.GetString(bytes, 0, i);
//преобразование данных
data = data.ToUpper();

Перед отправкой через сокет строку необходимо преобразовать в массив байт.
Byte[] bytes = new Byte[256];
String data = “text”;
bytes =System.Text.Encoding.UTF.
GetBytes(data);
stream.Write(bytes, 0, bytes.Length);
0
dj_vadim2
0 / 0 / 0
Регистрация: 28.03.2013
Сообщений: 70
25.04.2013, 11:53  [ТС] #5
C#
1
2
3
4
Byte[] bytes = new Byte[256];
                String data = "text";
                bytes = Encoding.UTF8.GetBytes(data);
                s.Write(bytes, 0, bytes.Length);
System.Net.Sockets.Soket не содержит определения для Write и небыл найден метод расширения для Write принимающий тип System.Net.Sockets.Soket в качестве первого аргумента (возможно пропущена директива using или ссылка на сборку)
0
eagl69
4 / 9 / 1
Регистрация: 12.10.2011
Сообщений: 498
25.04.2013, 12:56 #6
Для подключения к серверу используется конструктор, параметрами которого служат IP-адрес серверной программы и порт, который сервер прослушивает:

TcpClient client = new TcpClient(server, port);
NetworkStream stream = client.GetStream();
//произошло подключение, создается поток сообщений
NetworkStream stream = client.GetStream();
у Вас : s.Connect(Addr); //Коннектимся к срверу

Надо как минимум писать stream.Write(bytes, 0, bytes.Length); Куда отправляете данные....
0
dj_vadim2
0 / 0 / 0
Регистрация: 28.03.2013
Сообщений: 70
25.04.2013, 13:01  [ТС] #7
Тот код сервера и клиента полностью рабочий, и сообщения от клиента появляются в окне консоли сервера, а мне нужно сделать чтобы сервер один раз в самом начале, когда обнаружил что клиент к нему подключился, отправил этому клиенту сообщение о том что всё ок.
0
eagl69
4 / 9 / 1
Регистрация: 12.10.2011
Сообщений: 498
25.04.2013, 13:09 #8
Это второй вариант подключения...
АAddr = new IPEndPoint(127.0.0.1, 5300); //"localhost" = 127.0.0.1 пробовали вбить IP в строчку сразу?

Добавлено через 4 минуты
Клиент отправляет сообщение... сервер его получает?
Вот там где получает сообщение и пишите код отправки сообщения клиенту...
0
dj_vadim2
0 / 0 / 0
Регистрация: 28.03.2013
Сообщений: 70
25.04.2013, 13:12  [ТС] #9
канешно получает)
но вопрос ответа сервера - клиенту остаётся открытым
0
Миниатюры
Клиент Сервер на C# найти ошибку в коде  
eagl69
4 / 9 / 1
Регистрация: 12.10.2011
Сообщений: 498
25.04.2013, 13:17 #10
Я увидел в коде что сервер принимает сообщение....
cl_s.Receive(msg); //Принимаем МСГ
Console.WriteLine(Encoding.UTF8.GetString(msg)); //Конвертируем и выводим

А где отправка его?
0
dj_vadim2
0 / 0 / 0
Регистрация: 28.03.2013
Сообщений: 70
25.04.2013, 13:20  [ТС] #11
C#
1
Console.WriteLine(str);
это сообщение отображается в консоли сервера.
то что клиент прислал серверу, то сервер у себя на консоли и отобразил.. а мне нужно сделать чтобы сервер один раз в самом начале отослал клиенту сообщение, как это сделать? именно это и нужно написать в коде..
0
25.04.2013, 13:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.04.2013, 13:20
Привет! Вот еще темы с ответами:

Найти ошибку в коде - C#
Помогите найти ошибку, не доходит что-то)) using System; namespace Less02_task01 { class Program { static...

Найти ошибку в коде - C#
double power = 0;//начальная double res = 0;//результат //double tmp = 0; ...

Не могу найти ошибку в коде - C#
Помогите( не могу найти ошибку в коде... Вот код: namespace WindowsFormsApplication1 { public partial class Form1 : Form ...

Не могу найти ошибку в коде - C#
Подчеркивает красным propertyToAnimate. Пишет Аргумент 2: не удается преобразовать из string в System.Windows.PropertyPath. Как это решить?...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru