我有一個錯誤:插座在linux
[email protected]:~/socket$ g++ Socket.cpp
Socket.cpp: In member function ‘int Socket::recv(std::string&) const’:
Socket.cpp:135: error: ‘cout’ is not a member of ‘std’
Socket.cpp來源:
// Implementation of the Socket class.
#include "Socket.h"
#include "string.h"
#include <string.h>
#include <errno.h>
#include <fcntl.h>
Socket::Socket() :
m_sock (-1)
{
memset (&m_addr,
0,
sizeof (m_addr));
}
Socket::~Socket()
{
if (is_valid())
::close (m_sock);
}
bool Socket::create()
{
m_sock = socket (AF_INET,
SOCK_STREAM,
0);
if (! is_valid())
return false;
// TIME_WAIT - argh
int on = 1;
if (setsockopt (m_sock, SOL_SOCKET, SO_REUSEADDR, (const char*) &on, sizeof (on)) == -1)
return false;
return true;
}
bool Socket::bind (const int port)
{
if (! is_valid())
{
return false;
}
m_addr.sin_family = AF_INET;
m_addr.sin_addr.s_addr = INADDR_ANY;
m_addr.sin_port = htons (port);
int bind_return = ::bind (m_sock,
(struct sockaddr *) &m_addr,
sizeof (m_addr));
if (bind_return == -1)
{
return false;
}
return true;
}
bool Socket::listen() const
{
if (! is_valid())
{
return false;
}
int listen_return = ::listen (m_sock, MAXCONNECTIONS);
if (listen_return == -1)
{
return false;
}
return true;
}
bool Socket::accept (Socket& new_socket) const
{
int addr_length = sizeof (m_addr);
new_socket.m_sock = ::accept (m_sock, (sockaddr *) &m_addr, (socklen_t *) &addr_length);
if (new_socket.m_sock <= 0)
return false;
else
return true;
}
bool Socket::send (const std::string s) const
{
int status = ::send (m_sock, s.c_str(), s.size(), MSG_NOSIGNAL);
if (status == -1)
{
return false;
}
else
{
return true;
}
}
int Socket::recv (std::string& s) const
{
char buf [ MAXRECV + 1 ];
s = "";
memset (buf, 0, MAXRECV + 1);
int status = ::recv (m_sock, buf, MAXRECV, 0);
if (status == -1)
{
std::cout << "status == -1 errno == " << errno << " in Socket::recv\n";
return 0;
}
else if (status == 0)
{
return 0;
}
else
{
s = buf;
return status;
}
}
bool Socket::connect (const std::string host, const int port)
{
if (! is_valid()) return false;
m_addr.sin_family = AF_INET;
m_addr.sin_port = htons (port);
int status = inet_pton (AF_INET, host.c_str(), &m_addr.sin_addr);
if (errno == EAFNOSUPPORT) return false;
status = ::connect (m_sock, (sockaddr *) &m_addr, sizeof (m_addr));
if (status == 0)
return true;
else
return false;
}
void Socket::set_non_blocking (const bool b)
{
int opts;
opts = fcntl (m_sock,
F_GETFL);
if (opts < 0)
{
return;
}
if (b)
opts = (opts | O_NONBLOCK);
else
opts = (opts & ~O_NONBLOCK);
fcntl (m_sock,
F_SETFL,opts);
}
而且socket.h中:
// Definition of the Socket class
#ifndef Socket_class
#define Socket_class
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <unistd.h>
#include <string>
#include <arpa/inet.h>
const int MAXHOSTNAME = 200;
const int MAXCONNECTIONS = 5;
const int MAXRECV = 500;
class Socket
{
public:
Socket();
virtual ~Socket();
// Server initialization
bool create();
bool bind (const int port);
bool listen() const;
bool accept (Socket&) const;
// Client initialization
bool connect (const std::string host, const int port);
// Data Transimission
bool send (const std::string) const;
int recv (std::string&) const;
void set_non_blocking (const bool);
bool is_valid() const { return m_sock != -1; }
private:
int m_sock;
sockaddr_in m_addr;
};
#endif
你真的寫了所有的代碼無需先編譯它? –
不是這是套接字編程的文件之一,並且錯誤出現在這個文件中。它使用make命令編譯 – user216112
您應該確保在發佈之前至少有一點要自己調查問題。你得到的編譯錯誤甚至與套接字有關,谷歌可能告訴你。 – mnemosyn