在学习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、当没有接收到退出消息时,一直处于接收/发送状态。 |