Задать вопрос
vanesxl
@vanesxl

Как считать данные через сокеты?

Здравствуйте, реализовал сокет клиент на c#, логика работы такова:
Клиент делает запрос на сервер, сервер что то делает и возвращает строку клиенту.
Вот как сделал я:
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPAddress ipAddress = null;
            IPEndPoint Addr = null;

            ipAddress = Dns.GetHostEntry("web.domen.ru").AddressList[0];
            Addr = new IPEndPoint(ipAddress, 3319);
s.Connect(Addr);
byte[] outCommand = Encoding.UTF8.GetBytes("запрос на сервер");
s.Send(outCommand);
byte[] inCommand = new byte[s.Available];
s.Close();
string rzz = Encoding.UTF8.GetString(inCommand);


Почему то в переменной ничего нет rzz
Может я что то делаю не так?
Заранее большое спасибо!
  • Вопрос задан
  • 235 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
DmitryITWorksMakarov
@DmitryITWorksMakarov
вы нигде не принимаете ответ
вместо
byte[] inCommand = new byte[s.Available];
нужно что-то типа
var bytes = 0;
var sb= new StringBuilder();
var bytesReceived = new byte[256];
do 
{
    bytes = s.Receive(bytesReceived, bytesReceived.Length, 0);
    sb.Append(Encoding.UTF8.GetString(inCommand));
}
while (bytes > 0);
var rzz=sb.ToString();


Еще лучше использовать асинхронное взаимодействие. Между запросом и ответом может пройти существенное время и ответа может вообще не прийти. Во время ожидания программа может делать что-то полезное (а не делать вид, что зависла), например, помахать интерфейсом или обратиться к другому серверу/сокету.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы