webRTC示例分析(二)——peerConnection-server

在学习webRTC源码,下面分析peerConnection-server,仅作为自己的学习笔记,如有错误,欢迎指出。

server,是基于win32控制台写的,所以主函数 main 是入口函数。下面就分析一下server端通信建立的过程。

如果你需要补充一下 TCP/IP的基础知识,←点击这里

int main(int argc, char* argv[])

{

......

 ListeningSocket listener;

  // 调用Create() 函数,创建套接字
  if (!listener.Create()) {
    printf("Failed to create server socket\n");
    return -1;
  } // 绑定并监听
  else if (!listener.Listen(port)) {
    printf("Failed to listen on server socket\n");
    return -1;
  }

......

  while (!quit)// 开始接收
  {
    ......send(); //发送数据 
  }

......

}

1、Create() 函数 在data_socket.cc 文件中定义,属于SocketBase类,用来创建套接字。如下:

bool SocketBase::Create() {
  assert(!valid());
  socket_ = ::socket(AF_INET, SOCK_STREAM, 0);// 这是TCP的格式
  return valid();
}

2、Listen() 函数 在data_socket.cc 文件中定义 ,属于ListeningSocket类,实现绑定、监听套接字,如下:

// 绑定,并且监听,参数表明,服务端套接字在哪个端口监听
bool ListeningSocket::Listen(unsigned short port) {
  assert(valid());
  int enabled = 1;
  setsockopt(socket_, SOL_SOCKET, SO_REUSEADDR,
             reinterpret_cast<const char*>(&enabled), sizeof(enabled));
  struct sockaddr_in addr = {0};
  addr.sin_family = AF_INET;
  addr.sin_addr.s_addr = htonl(INADDR_ANY);
  addr.sin_port = htons(port);
    // 服务端addr, 绑定 服务端套接字上,socket_
  if (bind(socket_, reinterpret_cast<const sockaddr*>(&addr), sizeof(addr)) ==
      SOCKET_ERROR) {
    printf("bind failed\n");
    return false;
  }
    // listen 监听
  return listen(socket_, 5) != SOCKET_ERROR;// 等待链接的最大数,设为5
}

3、当没有接收到退出消息时,一直处于接收/发送状态。

猜你喜欢

转载自blog.csdn.net/qq_34732729/article/details/105806865