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
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;
}
I'm beginner in Visual C++ so I want to ask you a question. And I'm not good
in English
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;
}