亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? connection.c

?? uva trilearn的robocup源程序
?? C
字號:
/*Copyright (c) 2000-2002, Jelle Kok, University of AmsterdamAll rights reserved.Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the University of Amsterdam nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*//*! \file Connection.C<pre><b>File:</b>          Connection.C<b>Project:</b>       Robocup Soccer Simulation Team: UvA Trilearn<b>Authors:</b>       Jelle Kok<b>Created:</b>       23/11/2000<b>Last Revision:</b> $ID$<b>Contents:</b>      This file contains the class definitions for the               Connection class which sets up a connection with the               soccer server.<hr size=2><h2><b>Changes</b></h2><b>Date</b>             <b>Author</b>          <b>Comment</b>23/11/2000       Jelle Kok       Initial version created</pre>*/#include <errno.h>       // EWOULDBLOCK#include <unistd.h>      // close#include <string>      // strlen#include <sys/types.h>   // socket#include <sys/socket.h>  // socketusing namespace std;#ifdef Solaris#include <sys/socket.h>  // AF_INET SOCK_DGRAM#endif#include "Connection.h"#include "Logger.h"      // LOGextern Logger Log; /*!< This is a reference to the Logger for writing info to.*//******************************************************************************//********************** CONNECTION ********************************************//******************************************************************************//*! Default constructor. Only sets the maximum message size. */Connection::Connection( ){  m_iMaxMsgSize = 2048;}/*! Constructor makes a connection with the server using the connect method.    \param hostname string representation of host machine (string or IP number)    \param port port number for connection of the host machine    \param iMaxSize maximum message size that can be sent or received */Connection::Connection(const char *hostname, int port, int iMaxSize){  m_iMaxMsgSize = iMaxSize;  if(  connect( hostname, port ) )    Log.log( 1, "(Connection:connection) Socket connection made with %s:%d",                                                             hostname, port );  else    Log.log( 1, "(Connection:Connection) Could not create connection with %s:%d"                                                          , hostname, port );}/*! Deconstructor closes the connection with the server */Connection::~Connection(){  disconnect();}/*! This method sets up a connection with the server.    \param hostname string representation of host machine (string or IP number)    \param port port number for connection of the host machine    \return bool indicating whether connection was made */bool Connection::connect(const char *host, int port ){  struct hostent *host_ent;  struct in_addr *addr_ptr;  struct sockaddr_in  cli_addr ;  int    sockfd ;  m_sock.socketfd = -1 ;  if( (host_ent = (struct hostent*)gethostbyname(host)) == NULL)  {    // if not a string, get information from IP adress.#ifdef Solaris    if( inet_addr(host) == ((in_addr_t)-1) )#else    if( inet_addr(host) == INADDR_NONE )#endif    {      cerr << "(Connection::connect) Cannot find host " << host << endl;      return false ;    }  }  else   // get the necessary information from the hostname (string)  {    addr_ptr = (struct in_addr *) *host_ent->h_addr_list;    host = inet_ntoa(*addr_ptr);  }  //  Open UDP socket.  if( (sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)  {    cerr << "(Connection::connect) Cannot create socket " << host << endl;    return false ;  }  // insert the information of the client  cli_addr.sin_family      = AF_INET ;  cli_addr.sin_addr.s_addr = htonl(INADDR_ANY) ;  cli_addr.sin_port        = htons(0) ;  // bind the client to the server socket  if(bind(sockfd, (struct sockaddr *) &cli_addr, sizeof(cli_addr)) < 0)  {    cerr << "(Connection::connect) Cannot bind local address " << host << endl;    return false ;  }  //  Fill in the structure with the address of the server.  m_sock.socketfd = sockfd ;  m_sock.serv_addr.sin_family       = AF_INET ;  m_sock.serv_addr.sin_addr.s_addr  = inet_addr(host);  m_sock.serv_addr.sin_port         = htons(port) ;  return true;}/*! This method closes the current socket connection.  */void Connection::disconnect( void ){  if (isConnected() )  {    close(m_sock.socketfd) ;    m_sock.socketfd = -1; // This also 'sets' isConnected() to false  }}/*! This method determines whether the socket connection is connected.    \return bool indicating whether socket connection is available */bool Connection::isConnected(void) const{  return(m_sock.socketfd != -1);}/*! This method reads a message from the connection. When there is    no message available, it blocks till it receives a message.    \param msg string in which message is stored    \param maxsize maximum size of the message.    \return -1: error, 0: 0 bytes were read, 1 when read was succesfull */int Connection::receiveMessage( char *msg, int maxsize ){#ifdef Solaris  int       servlen;#else  socklen_t servlen ;#endif  int n;  struct sockaddr_in serv_addr ;  servlen = sizeof(serv_addr) ;  // receive message from server  n = recvfrom(m_sock.socketfd, msg, maxsize, 0,                              (struct sockaddr *)&serv_addr, &servlen);  if(n < 0)                                   // error  {    if( n == -1 && errno == EWOULDBLOCK)    {      msg[0] = '\0' ;      return 0 ;    }    else      return -1;  }  else                                       // succesfull, set new server info  {                                          // next message will go to there    m_sock.serv_addr.sin_port = serv_addr.sin_port ;    msg[n] = '\0' ;    return ( n == 0 ) ? 0 : 1 ;  }}/*! This method sends a message to the server using the current connection.    \param msg string which contains message    \return true on succes, false in case of failure */bool Connection::sendMessage( const char *msg ){  int n;  n = strlen(msg) + 1 ;  if( sendto(m_sock.socketfd, msg, n, 0,      (struct sockaddr *)&m_sock.serv_addr, sizeof(m_sock.serv_addr)) != n )    return false ;  return true ;}/*! This method always loops and waits for input. When input is received from    fpin then this input is send to the server using the current connection.    When message is received from the server, this message is sent to fpout.    \param fpin file pointer from which input is read (i.e. stdin )    \param fpout file pointer to which output should be directed (i.e. stdout)    \return 0 but only when error occured in reading input */int Connection::message_loop( FILE *fpin, FILE *fpout ){  fd_set readfds, readfds_bak;  int in, max_fd, n, ret;  char buf[m_iMaxMsgSize];  in = fileno( fpin );  FD_ZERO( &readfds );  FD_SET( in, &readfds );  readfds_bak = readfds;  max_fd = ((in > m_sock.socketfd) ? in : m_sock.socketfd) = 1;  while( 1 )  {    readfds = readfds_bak;    // wait for message from socket or fpin    if(( ret = select( max_fd, &readfds, NULL, NULL, NULL )) < 0 )    {      perror("select");      break;    }    else if( ret != 0 )    {      if( FD_ISSET(in, &readfds))              // file descriptor fpin was set      {        fgets(buf, m_iMaxMsgSize, fpin);             // get the message        if( sendMessage(buf ) == false )       // and send it          break;      }      if( FD_ISSET(m_sock.socketfd, &readfds ) ) // file descriptor socket was set      {        n = receiveMessage(buf, m_iMaxMsgSize);      // receive the message        if( n == -1 )          break;        else if( n > 0 )                       // and put it to fpout        {          fputs(buf, fpout);          fputc( '\n', fpout);        }        fflush(stdout);      }    }  }  return 0;}/*! This method prints whether the connection is up or not.    \param os output stream to which output should be directed */void Connection::show( ostream os ){  if( ! isConnected() )    os << "Not connected" << endl;  else    os << "Connected" << endl;}/********************** TESTING PURPOSES **************************************//*int main( void ){  char strBuf[m_iMaxMsgSize];  Connection c( "localhost", 6000 );  int i;  c.sendMessage( "(init l (version 6.07))" );  while( 1 )  {    i = c.receiveMessage( strBuf, m_iMaxMsgSize );    printf("%d|%s|\n", i, strBuf );  }  return 0;}*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久狠狠亚洲综合| 色偷偷88欧美精品久久久| av日韩在线网站| 4438x成人网最大色成网站| 中文一区二区在线观看| 日韩国产精品大片| 在线欧美日韩国产| 国产精品视频观看| 国产自产v一区二区三区c| 欧美日韩在线亚洲一区蜜芽| 国产亲近乱来精品视频| 麻豆久久一区二区| 欧美色综合天天久久综合精品| 国产日产精品一区| 黄页网站大全一区二区| 正在播放一区二区| 日韩中文字幕亚洲一区二区va在线| 岛国精品一区二区| 国产夜色精品一区二区av| 奇米精品一区二区三区四区 | 国产一区在线看| 91精品国产综合久久精品麻豆| 亚洲精品视频在线观看免费 | 91麻豆swag| 亚洲色图第一区| voyeur盗摄精品| 国产精品不卡在线观看| 成人国产在线观看| 中文字幕亚洲区| av电影在线观看不卡| 国产精品理论片| 成人蜜臀av电影| 日韩美女啊v在线免费观看| 9i在线看片成人免费| 亚洲私人影院在线观看| 91丨porny丨国产入口| 亚洲日本va在线观看| 成人黄色一级视频| 亚洲色图制服诱惑| 欧美综合一区二区三区| 亚洲成人动漫一区| 91精品久久久久久久99蜜桃| 蜜桃av噜噜一区二区三区小说| 日韩欧美一级精品久久| 国产又粗又猛又爽又黄91精品| 久久久精品2019中文字幕之3| 高清在线不卡av| 国产精品成人免费在线| 色88888久久久久久影院按摩| 亚洲综合一二三区| 欧美一区欧美二区| 国产成人aaa| 一区二区三区日韩欧美精品| 在线播放欧美女士性生活| 久久精品99国产精品| 欧美激情一区二区三区蜜桃视频| 日本二三区不卡| 亚洲第一二三四区| 欧美成人a∨高清免费观看| 国产99久久久久| 亚洲一区二区三区四区在线观看| 欧美高清激情brazzers| 国产一区二区三区av电影| 亚洲欧洲日韩av| 欧美精品国产精品| 国产91精品在线观看| 亚洲国产日韩av| 亚洲精品在线免费播放| 色香蕉成人二区免费| 美女视频第一区二区三区免费观看网站| 久久夜色精品一区| 在线国产亚洲欧美| 国产黄色精品网站| 亚洲成a人在线观看| 日本一区二区免费在线| 欧美日韩国产高清一区二区三区| 韩国视频一区二区| 有坂深雪av一区二区精品| 久久亚洲欧美国产精品乐播 | 国产欧美日韩另类一区| 欧美羞羞免费网站| 国产99久久久久久免费看农村| 亚洲成人精品影院| 亚洲日本欧美天堂| 国产日产欧美一区| 精品少妇一区二区三区日产乱码| 在线亚洲欧美专区二区| 国产精品乡下勾搭老头1| 日韩在线一区二区三区| 亚洲欧美日韩国产手机在线| 久久亚洲一区二区三区明星换脸| 欧美日韩国产免费| 色婷婷精品大在线视频 | 国产日产欧美一区| 精品久久久影院| 91精品国产综合久久久久久漫画| 欧洲色大大久久| 9久草视频在线视频精品| 国产精品白丝av| 国产一区二区三区在线观看免费视频| 久久精品久久综合| 午夜精品123| 一区二区免费在线播放| 成人欧美一区二区三区视频网页| 久久久久久久久一| 欧美精品一区二区三区蜜桃| 欧美一区二区视频观看视频| 精品视频一区 二区 三区| 色婷婷综合久久久久中文| 99久久99久久精品免费看蜜桃| 成人精品一区二区三区四区 | 成人免费看的视频| 国产精品一区二区视频| 国产精品99久久久久久久女警| 精品一二三四在线| 激情文学综合丁香| 国产又粗又猛又爽又黄91精品| 蜜桃一区二区三区四区| 久久精品99国产精品| 国产在线日韩欧美| 国产成人亚洲综合a∨猫咪| 国产精品白丝jk白祙喷水网站 | 久久久www成人免费无遮挡大片 | 精品一区二区三区香蕉蜜桃 | 波多野结衣中文一区| 成人18视频在线播放| 99久久99久久精品国产片果冻| 91免费精品国自产拍在线不卡| 91蜜桃在线免费视频| 91成人在线精品| 欧美精品v日韩精品v韩国精品v| 欧美日韩国产首页| 亚洲精品一区二区三区精华液| 久久精品亚洲精品国产欧美kt∨| 国产精品视频第一区| 亚洲午夜羞羞片| 免费不卡在线视频| 成人综合在线视频| 91麻豆免费看片| 91麻豆精品国产91久久久 | 亚洲国产精品精华液ab| 亚洲视频一二三| 日韩精品欧美精品| 国产不卡在线一区| 色一区在线观看| 精品国产一区二区精华| 国产精品欧美精品| 日日夜夜免费精品| 粉嫩13p一区二区三区| 欧美日韩中文国产| 久久久久久久久蜜桃| 亚洲国产中文字幕在线视频综合| 蜜桃精品在线观看| 99在线热播精品免费| 欧美精品成人一区二区三区四区| 国产亚洲精久久久久久| 亚洲综合一区二区精品导航| 久久成人精品无人区| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 国产精品乱码一区二三区小蝌蚪| 亚洲综合清纯丝袜自拍| 国产美女一区二区| 欧美日韩大陆在线| 日韩美女视频一区二区| 麻豆久久久久久久| 欧美最猛黑人xxxxx猛交| 一区二区三区中文在线| 久久精品国产成人一区二区三区 | 麻豆精品久久精品色综合| 97se狠狠狠综合亚洲狠狠| 日韩欧美亚洲一区二区| 亚洲在线视频网站| 成人丝袜视频网| 精品99999| 日本三级韩国三级欧美三级| 91老司机福利 在线| 国产丝袜美腿一区二区三区| 日本成人在线看| 欧美日韩免费高清一区色橹橹| 国产精品国产三级国产普通话三级| 美日韩一区二区三区| 精品1区2区3区| 一区二区三区在线观看欧美| 成人天堂资源www在线| 久久一区二区三区四区| 久久精品国产99| 欧美一级欧美三级| 香蕉成人伊视频在线观看| 91传媒视频在线播放| 亚洲色图一区二区三区| 成人av电影在线播放| 中文字幕一区在线观看视频| 国产剧情一区二区| 久久久久久久久久电影| 狠狠v欧美v日韩v亚洲ⅴ| 日韩免费看的电影| 蜜臀av一区二区在线观看| 日韩午夜在线观看| 美女性感视频久久| 日韩欧美电影在线|