namespace socket_test {
using namespace System;
...
using namespace System::Net;
using namespace System::Net::Sockets;
using namespace System::Text;
public ref class summ
{
public:
array<Byte>^ buffer;
Socket^ client;
summ() {
buffer = gcnew array<Byte>(256);
//client=NULL;
}
};
public ref class Form1 : public System::Windows::Forms::Form
{
...
#pragma endregion
Socket^ ConnectSocket( String^ server, int port )
{
...
}
static void OnSocketReceive(IAsyncResult^ ar)
{
summ^ client = (summ^)ar->AsyncState;
int bytes_count = client->client->EndReceive(ar);
Windows::Forms::MessageBox::Show(Encoding::ASCII->GetString( client->buffer, 0, bytes_count),"123");
client->client->BeginReceive (client->buffer,0,256,SocketFlags::None,gcnew AsyncCallback(OnSocketReceive),client);
}
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
String^ request = "request string";
array<Byte>^bytesSent = Encoding::ASCII->GetBytes( request );
array<Byte>^bytesReceived = gcnew array<Byte>(256);
Socket^ s;
// Create a socket connection with the specified server and port.
s = ConnectSocket( "192.168.192.2", 7 );
if ( s == nullptr )
return;
// Send request to the server.
s->Send( bytesSent, bytesSent->Length, static_cast<SocketFlags>(0) );
// Receive the server home page content.
int bytes = 0;
summ^ status=gcnew summ;
status->client = s;
s->BeginReceive (status->buffer,0,256,SocketFlags::None,gcnew AsyncCallback(OnSocketReceive),status);
}
};
проблемы при программировании сокетов
Код:
1) Вопрос №1
Когда я объявляю класс summ над классом формы - вре нормально работает, кроме конструктора форм. Конструктор форм отображает ошибку, мол, что класс формы должен быть первым. Поскольку это С++ в нем нету вложенных классов, подскажите пожалуйста, где мне объявить этот класс так, что бы и программа работала и конструктор форм
2) Вопрос №2
Функция OnSocketReceive должна быть static, иначе компилятор ругается. Как в таком случае быть, если я хочу данные, переданные через сеть отобразить в каком либо текстбоксе. Конструкция this->textbox1->text="123"; не катит, т.к. в статичной функции нет указателя this. Как поступать в данном случае?
Жаль, что я ни черта не рублю в С++, но здравый смысл подсказывает решение ответить на второй вопрос через событие с параметрами.