The problem with sockets using Visual C++ windows form application

D

Darth-Cz-

Hi,

I'm beginner in Visual C++ so I want to ask you a question. And I'm not good
in English:D
So I have the program which communicates over sockets. The program has to
connect to the server and send and receive data. But when I start the
program, there is one Socketexception - something like the program is unable
to connect to the server or the server didn't answer...
I apologize for my English... Thank you for advice...

I made this code:

private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^
e) {
try
{
Int32 port = 80;
TcpClient^ client = gcnew TcpClient( "www.centrum.cz",port );

// Translate the passed message into ASCII and store it as a Byte array.
array<Byte>^data = System::Text::Encoding::ASCII->GetBytes( "GET /
HTTP/1.1\n\n" );

// Get a client stream for reading and writing.
// Stream stream = client->GetStream();

NetworkStream^ stream = client->GetStream();

// Send the message to the connected TcpServer.
stream->Write( data, 0, data->Length );
String^ message;
MessageBox::Show( "Sent: {0}", message );

// Receive the TcpServer::response.

// Buffer to store the response bytes.
data = gcnew array<Byte>(256);

// String to store the response ASCII representation.
String^ responseData = String::Empty;

// Read the first batch of the TcpServer response bytes.
Int32 bytes = stream->Read( data, 0, data->Length );
responseData = System::Text::Encoding::ASCII->GetString( data, 0, bytes );
MessageBox::Show( "Received: {0}", responseData );

// Close everything.
client->Close();
}
catch ( ArgumentNullException^ e )
{
MessageBox::Show( e->ToString(),"ArgumentNullException: {0}" );
}
catch ( SocketException^ e )
{
MessageBox::Show( e->ToString(),"SocketException: {0}" );
}

}

The same problem I have when I do console application:

// chatik2.cpp : Defines the entry point for the console application.
//
#include <stdafx.h>

#define BUFSIZE 1000

using namespace std;

int main(void)
{
WORD wVersionRequested = MAKEWORD(1,1); // Číslo verze
WSADATA data; // Struktura s info. o knihovnÄ›
string text("GET HTTP/1.0\r\n"); // Odesílaný a
přijímaný text
hostent *host; // Vzdálený poÄítaÄ
sockaddr_in serverSock; // Vzdálený "konec potrubí"
int mySocket; // Soket
int port; // Číslo portu
char buf[BUFSIZE]; // Přijímací buffer
int size; // PoÄet pÅ™ijatých a odeslaných bytů

// Připravíme sokety na práci
if (WSAStartup(wVersionRequested, &data) != 0)
{
cout << "Nepodařilo se inicializovat sokety" << endl;
// Podle všeho, zde se WSACleanup volat nemusí.
return -1;
}
port = 80;
// Zjistíme info o vzdáleném poÄítaÄi
if ((host = gethostbyname("www.seznam.cz")) == NULL)
{
cerr << "Špatná adresa" << endl;
WSACleanup();
return -1;
}
// Vytvoříme soket
if ((mySocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1)
{
cerr << "Nelze vytvořit soket" << endl;
WSACleanup();
return -1;
}
// Zaplníme strukturu sockaddr_in
// 1) Rodina protokolů
serverSock.sin_family = AF_INET;
// 2) Číslo portu, ke kterému se připojíme
serverSock.sin_port = 80;
// 3) Nastavení IP adresy, ke které se připojíme
memcpy(&(serverSock.sin_addr), host->h_addr, host->h_length);
// Připojení soketu
if (connect(mySocket, (sockaddr *)&serverSock, sizeof(serverSock)) == -1)
{
cerr << "Nelze navázat spojení" << endl;
WSACleanup();
return -1;
}
// Odeslání dat
if ((size = send(mySocket, text.c_str(), text.size() + 1, 0)) == -1)
{
cerr << "Problém s odesláním dat" << endl;
WSACleanup();
return -1;
}
cout << "Odesláno " << size << endl;
// Příjem dat
text = "";
while (((size = recv(mySocket, buf, BUFSIZE, 0)) != 0) && (size != -1))
{
cout << "Přijato " << size << endl;
text += buf;
}
if (size == -1)
{
cout << "Nelze přijmout data" << endl;
}
// Uzavřu spojení
closesocket(mySocket);
WSACleanup();
cout << endl << text << endl;
return 0;
}
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top