/****************************************************************************** * * * Klasse Socket * * * * Klasse zur Datenübertragung über die Socket Schnittstelle, * * * * (c) 2006 Michael Zimmer, HTS * * * * Borland C++Builder 4.0 * * * ****V1.0**********************************************************************/ //--------------------------------------------------------------------------- #include "Socket.h" //--------------------------------------------------------------------------- Socket::Socket(string host, int port) { this->port = port; this->host = host; // WinSock-DLL einbinden WSADATA m_wsa; WSAStartup(MAKEWORD(2,0), &m_wsa); // Socket erzeugen this->socket = ::socket(AF_INET, SOCK_STREAM, 0); } Socket::Socket(SOCKET socket) { this->socket = socket; } bool Socket::connect() { SOCKADDR_IN addr; memset( &addr, 0, sizeof( SOCKADDR_IN )); addr.sin_family = AF_INET; addr.sin_port = htons((short)this->port); addr.sin_addr.s_addr = inet_addr(this->host.c_str()); // Verbindung herstellen int rc = ::connect(socket, (SOCKADDR*) &addr, sizeof( SOCKADDR )); return rc != SOCKET_ERROR; } int Socket::dataAvailable() { const int len = 1024; char b[len]; return recv(socket, b, len, MSG_PEEK); } void Socket::write(int b) { char tmp[1]; tmp[0] = (char)b; send(socket, tmp, 1, 0); } void Socket::write(const char*b, int len) { send(socket, b, len, 0); } void Socket::write(string s) { send(socket, s.c_str(), (int)s.length(), 0); } int Socket::read() { char tmp[1]; recv(socket, tmp, 1, 0); return tmp[0]; } int Socket::read(char* b, int len) { return recv(socket, b, len, 0); } string Socket::readLine() { char buffIn[256]; int pos = -1; do { pos++; recv(socket, buffIn+pos, 1, 0); } while (buffIn[pos] != '\n'); buffIn[pos] = '\0'; // echo-String ist mit '\n' abgechlossen return string(buffIn); } void Socket::close() { closesocket(socket); }