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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? connection.c

?? 機(jī)器足球2D比賽程序 對trlen_base_2002的改進(jìn)
?? 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.h>      // strlen#include <sys/types.h>   // socket#include <sys/socket.h>  // socket#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;}*/

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
婷婷开心激情综合| 精品国产一区二区亚洲人成毛片| 国产精品久久久久久久久久久免费看 | 一级做a爱片久久| 日本韩国一区二区| 一区二区三区欧美激情| 欧美亚洲免费在线一区| 日韩国产在线一| 日韩一区二区三区三四区视频在线观看 | 中文字幕在线一区免费| 91色porny蝌蚪| 亚洲午夜三级在线| 欧美成人vr18sexvr| 国产大陆a不卡| 亚洲精品日日夜夜| 91精品国模一区二区三区| 国产在线国偷精品免费看| 国产精品高潮久久久久无| 精品视频在线看| 国产在线不卡一区| 亚洲视频资源在线| 日韩免费性生活视频播放| 国产成人在线影院| 亚洲成人在线网站| 久久久久久久综合日本| 一本色道综合亚洲| 蜜臂av日日欢夜夜爽一区| 色婷婷久久综合| 亚洲欧洲美洲综合色网| 欧美日韩精品二区第二页| 激情综合网av| 悠悠色在线精品| 日韩三级视频在线看| 91在线观看成人| 蜜臀av性久久久久av蜜臀妖精| 国产三级精品视频| 这里只有精品视频在线观看| 成人av电影在线观看| 亚洲国产一区视频| 欧美国产亚洲另类动漫| 欧美美女喷水视频| 成人aa视频在线观看| 久久99精品一区二区三区| 亚洲精品老司机| 久久久精品国产99久久精品芒果| 欧美最猛黑人xxxxx猛交| 国产盗摄精品一区二区三区在线| 午夜精品视频在线观看| 国产欧美视频在线观看| 99精品欧美一区二区三区综合在线| 亚洲综合成人在线视频| 欧美激情一二三区| 日韩精品一区二区在线观看| 在线免费亚洲电影| 成人av午夜电影| 黄页网站大全一区二区| 日韩在线一二三区| 亚洲五月六月丁香激情| 18涩涩午夜精品.www| 亚洲美女屁股眼交3| 久久夜色精品国产欧美乱极品| 欧美中文字幕一区| 91免费视频网| 99精品欧美一区二区三区综合在线| 国产综合久久久久久鬼色 | 日韩视频123| 欧美三级韩国三级日本一级| 99国产精品久| 91在线精品一区二区三区| 成人激情视频网站| 国产高清不卡一区| 欧美aaa在线| 日本久久精品电影| www.日韩大片| 东方aⅴ免费观看久久av| 国内久久精品视频| 国产一区二区三区视频在线播放 | 久色婷婷小香蕉久久| 亚洲aaa精品| 青青草97国产精品免费观看| 亚洲成人激情综合网| 亚洲小说欧美激情另类| 亚洲色图视频网| 一区二区三区欧美| 亚洲一区二区三区小说| 午夜久久久久久| 日本人妖一区二区| 久久99精品久久久久久动态图| 日本欧美肥老太交大片| 久久99久久久欧美国产| 六月丁香婷婷久久| 国产成人综合在线观看| 99精品视频一区| 欧美中文字幕一区二区三区亚洲| 日韩欧美国产wwwww| 国产精品视频免费| 精品国产制服丝袜高跟| 精品国精品自拍自在线| 2020国产精品久久精品美国| 久久精品网站免费观看| 国产精品久久久久影院亚瑟| 一区二区三区在线观看视频 | 亚洲同性gay激情无套| 一区二区在线观看不卡| 日韩精品一级二级| 免费成人av在线播放| 懂色av中文字幕一区二区三区| 色综合视频一区二区三区高清| 欧美性一二三区| 久久蜜桃av一区精品变态类天堂| 1000精品久久久久久久久| 亚洲午夜精品网| 国产乱子轮精品视频| 91丨porny丨户外露出| 777亚洲妇女| 国产精品福利影院| 蜜臀av一区二区在线观看| 成人av资源下载| 欧美精品 国产精品| 成人视屏免费看| 欧美精品第1页| 久久新电视剧免费观看| 亚洲欧美自拍偷拍| 蜜桃免费网站一区二区三区| 国产成人在线视频播放| 欧美无乱码久久久免费午夜一区 | 日韩影视精彩在线| 国产91丝袜在线18| 欧美精品丝袜久久久中文字幕| 久久精品这里都是精品| 天堂成人国产精品一区| kk眼镜猥琐国模调教系列一区二区| 欧美日韩五月天| 国产精品理论片| 麻豆精品一区二区av白丝在线| av在线免费不卡| 久久天堂av综合合色蜜桃网 | 成人激情综合网站| 欧美顶级少妇做爰| 亚洲欧美偷拍三级| 国产成人免费xxxxxxxx| 91精品国产色综合久久不卡电影| 国产精品第一页第二页第三页| 国产成人精品三级麻豆| 国产成人av资源| 欧美日韩视频在线第一区| 国产精品毛片久久久久久| 免费看欧美美女黄的网站| 欧美午夜免费电影| 亚洲女同ⅹxx女同tv| 粉嫩欧美一区二区三区高清影视 | 91精品国产综合久久婷婷香蕉| 国产精品免费视频网站| 国产精品一区二区黑丝| 日韩欧美高清一区| 日韩高清在线一区| 欧美日韩不卡一区| 亚洲成人免费av| 欧美性色综合网| 亚洲精品国产a| 91小视频免费观看| 自拍偷自拍亚洲精品播放| 成人爽a毛片一区二区免费| 国产视频视频一区| 国产精品亚洲视频| 久久久久久久电影| 午夜欧美大尺度福利影院在线看| 99精品视频在线观看| 中文字幕在线一区免费| 97超碰欧美中文字幕| 国产精品久久久久aaaa樱花 | 日韩欧美美女一区二区三区| 亚洲午夜久久久久久久久久久| 91麻豆免费视频| 中文字幕亚洲成人| 一本色道久久加勒比精品| 亚洲品质自拍视频| 91福利视频久久久久| 午夜精品久久久久久久久久 | 欧美无砖专区一中文字| 亚洲成人一二三| 欧美一区二区精美| 国产一区二区三区黄视频| 国产欧美一区二区精品秋霞影院| 成人av在线资源网站| 亚洲老司机在线| 在线播放欧美女士性生活| 青青草97国产精品免费观看| 精品国产一区二区亚洲人成毛片 | 久久国产精品99久久人人澡| 精品日韩欧美一区二区| 国产精品99久| 亚洲综合久久av| 欧美一区二区三区不卡| 国产一区中文字幕| 日韩伦理免费电影| 8x福利精品第一导航| 国产精品888| 亚洲制服丝袜av| 精品国产凹凸成av人导航|