Sendto не работает приложение Windows-Form

Я работаю над программированием сокетов (сокетов UDP) в приложении Windows-формы.
Я вызвал socket () при нажатии кнопки, затем я хочу отправить несколько байтов при нажатии другой кнопки. Sendto () возвращает 0, когда я нажимаю нужную кнопку, но данные не принимаются на другом конце, но когда я вызываю sendto () из другой поток внутри одного приложения работает нормально.

Ниже приведена функция для вызова socket ():

int socket_create(String^* error,SOCKET *sock_fd,int port_number)
{
sockaddr_in my_addr;
*sock_fd = INVALID_SOCKET;

// Create a SOCKET for the server to listen for client connections
*sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
if (*sock_fd == INVALID_SOCKET)
{
this->richTextBox1->AppendText("Error at socket():"+     WSAGetLastError() + "\n");
return -1;
}
else
this->richTextBox1->AppendText("Socket succesfully opened on port number: " + port_number + "\n");
// The sockaddr_in structure specifies the address family,
// IP address, and port for the socket that is being bound.
my_addr.sin_family = AF_INET;
my_addr.sin_addr.s_addr = inet_addr("192.168.1.2");
my_addr.sin_port = htons(port_number);

if (bind(*sock_fd, (SOCKADDR *) & my_addr, sizeof (my_addr)) == SOCKET_ERROR)
{
this->richTextBox1->AppendText("bind failed:" + WSAGetLastError()+ "\n");
//freeaddrinfo(result);
closesocket(*sock_fd);
return -1;
}
else
this->richTextBox1->AppendText("Bind succesful on port number:" + port_number + "\n");
return 0;
}

Ниже приведен код кнопки, которая вызывает socket_create () для открытия сокета:

private: System::Void Connect_btn_Click(System::Object^  sender, System::EventArgs^  e)
{
int status = 0;
String^ error;
status = socket_create(&error, &s_8888,8888);
}

дескриптор сокета s_8888 определен глобально.

Ниже приведен код кнопки для вызова sendto ():

private: System::Void test_btn_Click(System::Object^  sender, System::EventArgs^  e)
{
sockaddr_in their_addr;
their_addr.sin_family = AF_INET;
their_addr.sin_addr.s_addr = inet_addr(ip_address);
their_addr.sin_port = htons(8888);
int length = sizeof (their_addr);
i=sendto(s_8888 , buf , sizeof(buf), 0, (SOCKADDR *) &their_addr, length);
if(i== SOCKET_ERROR)
{
MessageBox::Show("" + WSAGetLastError());
}
richTextBox1->AppendText("" + i + "\n");
}

Я не могу понять, почему он так себя ведет и как его решить?

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]