00001 /******************************************************************************* 00002 * Copyright (C) 2001-2004 Vintela, Inc. All rights reserved. 00003 * 00004 * Redistribution and use in source and binary forms, with or without 00005 * modification, are permitted provided that the following conditions are met: 00006 * 00007 * - Redistributions of source code must retain the above copyright notice, 00008 * this list of conditions and the following disclaimer. 00009 * 00010 * - Redistributions in binary form must reproduce the above copyright notice, 00011 * this list of conditions and the following disclaimer in the documentation 00012 * and/or other materials provided with the distribution. 00013 * 00014 * - Neither the name of Vintela, Inc. nor the names of its 00015 * contributors may be used to endorse or promote products derived from this 00016 * software without specific prior written permission. 00017 * 00018 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' 00019 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00020 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00021 * ARE DISCLAIMED. IN NO EVENT SHALL Vintela, Inc. OR THE CONTRIBUTORS 00022 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 00023 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 00024 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 00025 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 00026 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 00027 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 00028 * POSSIBILITY OF SUCH DAMAGE. 00029 *******************************************************************************/ 00030 /* 00031 #include "OW_config.h" 00032 #include "easyaddress.h" 00033 #include "easyneterror.h" 00034 #include "easysocket.h" 00035 #include "easyserver.h" 00036 */ 00037 #include "OW_ServerSocket.hpp" 00038 #include "OW_SocketAddress.hpp" 00039 #include <iostream> 00040 #include <fstream.h> 00041 #include <string> 00042 #include <stdlib.h> 00043 #include <unistd.h> 00044 using namespace std; 00045 int main(int argc, char** argv) 00046 { 00047 try 00048 { 00049 cout << "What port do you want this server to squat on? "; 00050 unsigned short port; 00051 cin >> port; 00052 ServerSocket svr(port); 00053 SocketAddress localAddr = svr.getLocalAddress(); 00054 cout << "Listening on address " << localAddr.getName() << 00055 "(" << localAddr.getAddress() << ")" << ":" 00056 << localAddr.getPort() << endl; 00057 cout.flush(); 00058 Socket sock = svr.accept(); 00059 SocketAddress peerAddr = sock.getPeerAddress(); 00060 cout << "Connection is made. Client is " << peerAddr.getName() << 00061 "(" << peerAddr.getAddress() << ")" << ":" 00062 << peerAddr.getPort() << endl; 00063 ostream& ostrm = sock.getOutputStream(); 00064 ostrm << "Hello, this is a silly server. Enter a line of text!\n\r"; 00065 ostrm.flush(); 00066 ifstream& istrm = (ifstream&) sock.getInputStream(); 00067 char bfr[512]; 00068 sock.waitForInput(); 00069 istrm.getline(bfr, sizeof(bfr), '\n'); 00070 cout << bfr; 00071 cout.flush(); 00072 cout << endl; 00073 svr.close(); 00074 sock.disconnect(); 00075 } 00076 catch(SocketException &e) 00077 { 00078 cerr << "An exception occurred in " << endl; 00079 return 1; 00080 } 00081 return 0; 00082 } 00083