Member 14499788 Ответов: 1

Почему пакет данных TCP не передается?


Может ли кто - нибудь опубликовать пример программирования MFC VC++ TCP server для отправки пакетов данных data packets.

Что я уже пробовал:

Я перепробовал множество примеров и не смог найти решения.

Пример, который я попробовал, - это два objetcs из класса CASyncScoket
Один для прослушивания и один для подключения

Но TCP соединение не передает

//создание объекта
TCPSOCKET m_Listener
TCPSOCKET m_Connected


//Функция Прослушивания
если(m_sListener.Listen()==FALSE)
{
AfxMessageBox("невозможно прослушать этот порт,Пожалуйста, выберите другой порт");
m_sListener.Закрывать();
вернуть;
}

//Функция Привязки
m_Listener.Персонализация( 172.ХХ.ХХ.ХХ, m_port);

//Принять функцию
m_Listener.Принять(m_Connected);

//Функция отправки
m_Connected.Send (buf, sizeof(buf));

если есть какие - то изменения , пожалуйста, предложите соответствующий ответ

Заранее спасибо!!
овации

CPallini

где находится декларация TCPSOCKET (т. е. что такое TCPSOCKET?) ?

Member 14499788

TCPSocket-это класс, который я объявил из CAsyncSocket
# ПРАГМА один раз
#включить "pch.h"
#включить "TcpSendSocket.h"
#включить "MESS_TRIALDlg.h"
код #include "файл данных.ч"



TcpSendSocket::TcpSendSocket()
{
//UpdateData(TRUE);


}


TcpSendSocket::~TcpSendSocket()
{
}

1 Ответов

Рейтинг:
1

Richard MacCutchan

Как и многие люди в наши дни, вы игнорируете возвращаемые значения из ряда ваших вызовов методов, поэтому вы понятия не имеете, делает ли какой-либо из ваших кодов то, что вы думаете. Напишите правильный код, который проверяет все результаты, и изучите эти результаты, чтобы увидеть, что происходит. Если что-то не получается, используйте отладчик, чтобы выяснить причину.


Member 14499788

Я уже сделал то, что вы упомянули, и именно поэтому я написал здесь!
Кроме того, я новичок в программировании.

Richard MacCutchan

Итак, какие результаты или ошибки вы видите?

Member 14499788

программа работает, я могу получать данные, но не могу отправлять данные, не могу найти никаких ошибок!
Вот почему я немного запутался

Richard MacCutchan

Кроме того, согласно вашему комментарию на сайте Как получить непрерывный UDP-пакет данных с сервера?[^] ваша программа работает отлично. Так что же вы изменили с тех пор?

Member 14499788

Но мне нужно отправить данные через tCP.
В UDP я использовал только rec() и create () .
В TCP listen(), bind(), accept(), Send().
Но я думаю, что пока listen() его работа .
у меня есть некоторые проблемы с accept(), я думаю, но я не уверен.

Richard MacCutchan

- но я не уверен."
Вот почему я сделал свои предыдущие предложения. Мы не можем начать догадываться, что может быть не так в вашей системе без дополнительной информации. Поэтому убедитесь, что вы проверяете результаты каждого системного вызова. Используйте отладчик для сбора более подробной информации.

Member 14499788

во время отладки я обнаружил, что у меня есть проблема с функцией Accept сокета.
Я приложил код ниже:

//Связывать
m_sListener.Привязка(6000);

//Слушать
если (m_sListener.Listen() == FALSE)
{
AfxMessageBox(L"невозможно прослушать этот порт,пожалуйста, попробуйте другой порт");
m_sListener.Закрывать();
вернуть;
}
еще
m_sListener.Слушайте(1);

//Принимать
если (m_sListener.Принять(m_connected))
{
AfxMessageBox(L"TCP-соединение принято");

}
еще
{
AfxMessageBox(L"TCP-соединение не принимается");
}


Также в OnInitialDialog()

void MESSDlg:: OnInitialDialog()
{


//Творить
m_sListener.Создать(6000);
}
во время отладки у меня есть ASSERT над функцией Accept
и я не могу понять, что в этом плохого.

Richard MacCutchan

Мы не можем догадаться, на что жалуется утверждение.

Тем не менее, я предлагаю вам прочитать Программирование сокетов на C/C++ - GeeksforGeeks[^] который экспалирует и показывает, как это сделать.

Member 14499788

привет, ASSERT происходит из-за ошибки WSA 10035,
Операция блокируется для неблокирующих операций, но как я могу устранить эту ошибку?

Richard MacCutchan

Видеть Windows Sockets: Блокировка | Microsoft Docs[^Вам действительно нужно потратить больше времени на документацию, чтобы понять, по крайней мере, основную работу функций, которые вы пытаетесь использовать.