Apollo 11.0
自动驾驶开放平台
udp_echo_server.cc 文件参考
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <cstdlib>
#include <iostream>
#include <string>
#include <vector>
#include "cyber/cyber.h"
#include "cyber/init.h"
#include "cyber/io/session.h"
#include "cyber/scheduler/scheduler_factory.h"
#include "cyber/task/task.h"
#include "cyber/time/time.h"
udp_echo_server.cc 的引用(Include)关系图:

浏览源代码.

函数

void Echo (const std::shared_ptr< Session > &session)
 
int main (int argc, char *argv[])
 

函数说明

◆ Echo()

void Echo ( const std::shared_ptr< Session > &  session)

在文件 udp_echo_server.cc 第 35 行定义.

35 {
36 struct sockaddr_in client_addr;
37 std::vector<char> recv_buffer(2049);
38 int nbytes = 0;
39 socklen_t sock_len = static_cast<socklen_t>(sizeof(client_addr));
40
41 while (true) {
42 nbytes = static_cast<int>(
43 session->RecvFrom(recv_buffer.data(), recv_buffer.size(), 0,
44 (struct sockaddr*)&client_addr, &sock_len));
45 if (nbytes < 0) {
46 std::cout << "recv from client failed." << std::endl;
47 continue;
48 }
49 session->SendTo(recv_buffer.data(), nbytes, 0,
50 (const struct sockaddr*)&client_addr, sock_len);
51 }
52}

◆ main()

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

在文件 udp_echo_server.cc 第 54 行定义.

54 {
55 if (argc != 2) {
56 std::cout << "Usage: " << argv[0] << " <server port>" << std::endl;
57 return -1;
58 }
59
60 apollo::cyber::Init(argv[0]);
61
62 uint16_t server_port = static_cast<uint16_t>(atoi(argv[1]));
64 [&server_port]() {
65 struct sockaddr_in server_addr;
66 server_addr.sin_family = AF_INET;
67 server_addr.sin_addr.s_addr = htons(INADDR_ANY);
68 server_addr.sin_port = htons(server_port);
69
70 auto session = std::make_shared<Session>();
71 session->Socket(AF_INET, SOCK_DGRAM, 0);
72 if (session->Bind((struct sockaddr*)&server_addr, sizeof(server_addr)) <
73 0) {
74 std::cout << "bind to port[" << server_port << "] failed."
75 << std::endl;
76 return;
77 }
78 Echo(session);
79 session->Close();
80 },
81 "echo_server");
82
84 return 0;
85}
bool CreateTask(const RoutineFactory &factory, const std::string &name)
Definition scheduler.cc:37
void WaitForShutdown()
Definition state.h:50
bool Init(const char *binary_name, const std::string &dag_info)
Definition init.cc:99
void Echo(const std::shared_ptr< Session > &session)