home *** CD-ROM | disk | FTP | other *** search
/ ftp.hitl.washington.edu / ftp.hitl.washington.edu.tar / ftp.hitl.washington.edu / pub / people / peter / ER / SoundClient.cxx < prev    next >
C/C++ Source or Header  |  1998-07-07  |  2KB  |  99 lines

  1. #include "SoundClient.h"
  2.  
  3. #include <iostream.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <unistd.h>
  7. #include <strings.h>
  8. #include <sys/types.h>
  9. #include <netinet/in.h>
  10. #include <netdb.h>
  11. #include <sys/socket.h>
  12. #include <errno.h>
  13.  
  14. int SoundClient::DefaultPort = 2500;
  15.     // The default port to use to connect to the sound server.
  16.  
  17. SoundClient::SoundClient()
  18. {
  19.     // The socket starts out uninitialized.
  20.     socket_FD_ = -1;
  21. }
  22.  
  23. SoundClient::~SoundClient()
  24. {
  25. }
  26.  
  27. /*
  28. **    Function name : OpenSocket(char* host, int port )
  29. **
  30. **    Description : opens a socket
  31. **    Input : host - name of host to connect to
  32. **        port - port to connect to
  33. **        Output : true if the socket was successfully opened
  34. **            false otherwise
  35. */
  36. bool
  37. SoundClient::OpenSocket(char* hostName, int port)
  38. {
  39.     struct sockaddr_in clientAddr;
  40.     struct hostent* host;
  41.   
  42.     // Create the socket.
  43.     socket_FD_ = socket(AF_INET, SOCK_STREAM, 0);
  44.   
  45.     if(socket_FD_ < 0) {
  46.         cerr << "SoundClient: Cannot create sound socket to host " <<
  47.             hostName << " port " << port << endl;
  48.         return false;
  49.     }
  50.   
  51.   
  52.     // Clear struct.
  53.     bzero((char*)&clientAddr, sizeof(clientAddr));
  54.   
  55.     // Fill it in.
  56.     clientAddr.sin_family = AF_INET;
  57.     clientAddr.sin_port = htons(port);
  58.     host = gethostbyname(hostName);
  59.   
  60.     if (host)
  61.         clientAddr.sin_addr.s_addr =  ((struct in_addr*)(host->h_addr_list[0]))->s_addr;
  62.     else {
  63.         cerr << "SoundClient: Unable to resolve ip number for " <<
  64.             hostName << ".  Check /etc/hosts" << endl;
  65.         return false;
  66.     }
  67.  
  68.     // Connect.
  69.     if (connect(socket_FD_, (struct sockaddr*)&clientAddr, sizeof(clientAddr)) < 0) {
  70.         cerr << "SoundClient: Cannot connect." << endl;
  71.         return false;
  72.     }
  73.  
  74.     return true; 
  75. }
  76.  
  77. /*
  78. **    Function name : sendSound(int fd, char* sound )
  79. **
  80. **    Description : writes the name of the sound to the socket
  81. **    Input : sound -- the name of the sound file to play, without the
  82. **              extention
  83. **    Output : the number of bytes written
  84. */
  85. int
  86. SoundClient::SendSound(char* sound)
  87. {
  88.     // Make sure it's a valid socket.
  89.     if (socket_FD_) {
  90. cerr << "SoundClient: Sending " << sound << endl;
  91.         return write(socket_FD_, sound, strlen(sound));
  92.     } else {
  93. cerr << "SoundClient: Socket was not opened successfully, so cannot send "
  94. << sound << endl;
  95.         return 0;
  96.     }
  97. }
  98.  
  99.