本文整理汇总了C++中socket_write_string函数的典型用法代码示例。如果您正苦于以下问题:C++ socket_write_string函数的具体用法?C++ socket_write_string怎么用?C++ socket_write_string使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了socket_write_string函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: server_DELETE_id
void server_DELETE_id(http_request_t req, socket_t * clientSocket, sqlite3* db) {
char buf[1000] = "";
int id;
if(strpbrk(req.uri,"-0123456789"))
{
id = atoi(strpbrk(req.uri,"-0123456789"));
if(!db_checkId(db, id))
{
socket_write_string(clientSocket,"HTTP1.1 404 NOT FOUND\n"
"Content-Type: json\n"
"Content-Length: %i\r\n\r\n"
"%s\n""<body>Id not found<br>"
"<a href=\"/Teacher/\">To Teachers</a></body>");
return;
}
}
else
{
socket_write_string(clientSocket,"<body>Wrong id<br>"
"<a href=\"/Teacher/\">To Teachers</a></body>");
return;
}
db_deleteTeacherById (db, id);
server_send(clientSocket, "<body>Delete success<br>"
"<a href=\"/Teacher/\">To Teachers</a></body>");
}
开发者ID:SorochynskyiVladyslav,项目名称:CoursesRepository,代码行数:31,代码来源:server.c
示例2: server_getByIdHTML
static void server_getByIdHTML(http_request_t request, socket_t* client, worker_t** workers)
{
int id;
char* getId = strpbrk(request.uri, "0123456");
if(getId)
{
id = atoi(getId);
if(id<0 || id>6 || worker_getId(workers[id]) == -1)
{
socket_write_string(client, "<h1>Wrong ID</h1><p><a href=\"/workers/\">All workers</a></p>");
return;
}
}
else
{
server_notFound(client);
return;
}
char toSend[2000];
char buffer[2000] = "<head><title>Worker</title></head><h1>Worker</h1><p><a href=\"/workers/\">All workers</a></p><p>";
strcat(buffer, server_getWorkerHTML(workers[id]));
strcat(buffer, "</p>");
sprintf(toSend,
"HTTP/1.1 200 OK\n"
"Content-Type: text/html\n"
"Content-Length: %i\r\n\r\n"
"\n%s", strlen(buffer), buffer);
socket_write_string(client, toSend);
socket_close(client);
}
开发者ID:Konimiks,项目名称:hello-world,代码行数:31,代码来源:server.c
示例3: server_DELETE_id
void server_DELETE_id(http_request_t req,socket_t * clientSocket,lanser** freelanser)
{
char buf[1000]="";
int id;
if(strpbrk(req.uri,"-0123456789"))
{
id=atoi(strpbrk(req.uri,"-0123456789"));
if(id>9 || id<0)
{
socket_write_string(clientSocket,"HTTP1.1 404 NOT FOUND\n"
"Content-Type: json\n"
"Content-Length: %i\r\n\r\n"
"%s\n""<body>Id not found<br>"
"<a href=\"/Freelancer/\">To Freelancers</a></body>");
return;
}
}
else
{
socket_write_string(clientSocket,"<body>Wrong id<br>"
"<a href=\"/Freelancer/\">To Freelancers</a></body>");
return;
}
Freelanser_set(freelanser[id],NULL,NULL,0,NULL,0);
server_sent(clientSocket, "<body>Delete success<br>"
"<a href=\"/Freelancer/\">To Freelancers</a></body>");
}
开发者ID:vitalik296,项目名称:CoursesRepo,代码行数:30,代码来源:server.c
示例4: server_getByIdJSON
static void server_getByIdJSON(http_request_t request, socket_t* client, worker_t** workers)
{
int id;
char* getId = strpbrk(request.uri, "0123456");
if(getId)
{
id = atoi(getId);
if(id>6 || id<0 || worker_getId(workers[id]) == -1)
{
socket_write_string(client, "Wrong ID");
return;
}
}
else
{
server_notFound(client);
return;
}
char buffer[1000] = "";
char* worker = worker_makeWorkerJSON(workers[id]);
sprintf(buffer,
"HTTP/1.1 200 OK\n"
"Content-Type: application/json\n"
"Content-Length: %i\r\n\r\n"
"\n%s", strlen(worker)+1, worker);
socket_write_string(client, buffer);
socket_close(client);
}
开发者ID:Konimiks,项目名称:hello-world,代码行数:30,代码来源:server.c
示例5: server_deleteByIdJSON
static void server_deleteByIdJSON(http_request_t request, socket_t* client, worker_t** workers)
{
int id;
char* getId = strpbrk(request.uri, "0123456");
if(getId)
{
id = atoi(getId);
if(id<0 || id>6 || worker_getId(workers[id]) == -1)
{
socket_write_string(client, "<h1>Wrong ID</h1><p><a href=\"/workers/\">All workers</a></p>");
return;
}
}
else
{
server_notFound(client);
return;
}
char toSend[2000];
char buffer[2000];
sprintf(buffer,
"Success!"
"Worker %s successfully deleted!", worker_getName(workers[id]));
workers[id] = worker_new();
sprintf(toSend,
"HTTP/1.1 200 OK\n"
"Content-Type: application/json\n"
"Content-Length: %i\r\n\r\n"
"\n%s", strlen(buffer), buffer);
socket_write_string(client, toSend);
socket_close(client);
}
开发者ID:Konimiks,项目名称:hello-world,代码行数:35,代码来源:server.c
示例6: server_deleteByIdHTML
static void server_deleteByIdHTML(http_request_t request, socket_t* client, leading_t** leadings){
int id;
char* getId = strpbrk(request.uri, "0123456");
if(getId){
id = atoi(getId);
if(id < 0 || id > 6 || leading_getId(leadings[id]) == -1){
socket_write_string(client, "<h1>Wrong ID</h1><p><a href=\"/leadings/\">All leadings</a></p>");
return;
}
}else{
server_notFound(client);
return;
}
char toSend[2000];
char buffer[2000];
sprintf(buffer,
"<head><title>Delete</title></head>"
"<h1>Success</h1><p><a href=\"/leadings/\">All leadings</a></p>"
"<p>Leading %s successfully deleted!</p>", leading_getName(leadings[id]));
leading_fill(leadings[id], -1, "qqq", "qqq", "1111-11-11", 0, 0);
sprintf(toSend,
"HTTP/1.1 200 OK\n"
"Content-Type: text/html\n"
"Content-Length: %i\r\n\r\n"
"\n%s", strlen(buffer), buffer);
socket_write_string(client, toSend);
socket_close(client);
}
开发者ID:AndrienkoF,项目名称:KPIRepo,代码行数:31,代码来源:server.c
示例7: server_GET_id
void server_GET_id(http_request_t req,socket_t * clientSocket,lanser** freelancer)
{
char text[1000]="";
char *buf=NULL;
int id;
if(strpbrk(req.uri,"-0123456789"))
{
id=atoi(strpbrk(req.uri,"-0123456789"));
if(id>9 || id<0)
{
socket_write_string(clientSocket,"HTTP1.1 404 NOT FOUND\n"
"Content-Type: json\n"
"Content-Length: %i\r\n\r\n"
"Id not found");
return;
}
}
else
{
socket_write_string(clientSocket,"Wrong id");
return;
}
buf = lanser_toJSON(freelancer[id]);
strcat(text, buf);
server_sent(clientSocket, text);
}
开发者ID:vitalik296,项目名称:CoursesRepo,代码行数:32,代码来源:server.c
示例8: server_answer
void server_answer(db_t* self,list_t* list,http_request_t req, socket_t * clientSocket,lanser ** freelanser)
{
if(strcmp(req.uri,"/Freelancer/api/?"))
{
server_Sort(req,clientSocket,self);
}
else if (!strcmp(req.uri, "/Freelancer-count"))
{
server_count(clientSocket,list);
}
else if (!strcmp(req.uri, "/Freelancer/api"))
{
if (!strcmp(req.method, "GET"))
server_GET_all(req,clientSocket,list);
else if(!strcmp(req.method, "DELETE"))
server_DELETE_all(req,clientSocket,list);
else
socket_write_string(clientSocket, "Method not allowed!\n");
}
else if (strncmp(req.uri, "/Freelancer/api/",16)==0)
{
if(!strcmp(req.method,"GET"))
server_GET_id(req,clientSocket,list);
else if(!strcmp(req.method,"DELETE"))
server_DELETE_id(req,clientSocket,list,self);
else if(!strcmp(req.method,"POST"))
{
server_POST(req,clientSocket,list,self);
}
}
else if(!strncmp(req.uri,"/Freelancer/delete/",19))
{
server_DELETE_id(req,clientSocket,list,self);
}
else if(!strcmp(req.uri,"/Freelancer"))
{
server_start_page(clientSocket);
}
else if(!strcmp(req.uri,"/Freelancer/"))
{
server_GET_html(clientSocket,list);
}
else if(!strcmp(req.uri,"/Freelancer/paste"))
{
server_Paste_html(req,clientSocket,list);
}
else if(!strncmp(req.uri,"/Freelancer/",12))
{
server_GET_id_html(req,clientSocket,list);
}
else
socket_write_string(clientSocket,"\nHTTP1.1 404 NOT FOUND\n"
"Content-Type: application/json\n"
"Content-Length: %i\r\n\r\n""Freelancer not found\n");
}
开发者ID:vitalik296,项目名称:CoursesRepo,代码行数:56,代码来源:server.c
示例9: server_GET_id_html
void server_GET_id_html(http_request_t req,socket_t* clientSocket,lanser ** freelancer)
{
int id;
if(strpbrk(req.uri,"-0123456789"))
{
id=atoi(strpbrk(req.uri,"-0123456789"));
if(id>9 || id<0)
{
socket_write_string(clientSocket,"Id not found");
return;
}
}
else
{
socket_write_string(clientSocket,"Wrong id");
return;
}
char text [1000]="";
char buf[10000]="<html>"
"<head>"
"<title>Page Title</title>"
"</head>"
"<body>"
"<h1>Freelancer</h1>";
sprintf(text,"<p>Name:\t\t%s</p>"
"<p>Surname:\t%s</p>"
"<p>Age:\t\t%.2f</p>"
"<p>Date:\t\t%s</p>"
"<p>\tSalary:\t\t%i\n\n\n</p>"
"<p><a href=""/Freelancer/"">To prev page</a></p>",
Freelanser_name_get(freelancer[id]),
Freelanser_surname_get(freelancer[id]),
Freelanser_age_get(freelancer[id]),
Freelanser_date_get(freelancer[id]),
Freelanser_salary_get(freelancer[id])
);
strcat(buf,text);
sprintf(text,"<p><a href=\"/Freelancer/\" onclick=\"doDelete()\">Delete Freelancer</a></p>"
"<script>"
"function doDelete(){"
"var xhttp=new XMLHttpRequest();"
"xhttp.open(\"DELETE\",\"/Freelancer/api/%i\",true);"
"xhttp.send();"
"}"
"</script>",id);
strcat(buf,text);
strcat(buf,"</body>"
"</html>");
socket_write_string(clientSocket,buf);
}
开发者ID:vitalik296,项目名称:CoursesRepo,代码行数:53,代码来源:server.c
示例10: server_postHTML
static void server_postHTML(socket_t* client, worker_t** workers)
{
char buffer[2000] = "";
int id = 0;
int count = worker_workersCount(workers);
if(count >= MAX_WORKERS)
{
char fail[] = "<html><head><title>Failure</head></title>"
"<body><h1>Failure</h1>"
"<p>List is full!</p>"
"<p><a href=\"/workers/\">Back to all workers</a></p>"
"</body></html>";
sprintf(buffer,
"HTTP/1.1 200 OK\n"
"Content-Type: text/html\n"
"Content-Length: %i\r\n\r\n"
"\n%s", strlen(fail), fail);
socket_write_string(client, buffer);
socket_close(client);
return;
}
for(int i = 0; i<MAX_WORKERS; i++, id++)
{
if(worker_getId(workers[i]) == -1)
break;
}
char toSend[2000] = "";
sprintf(toSend,
"<html><head><title>Post</title></head>"
"<body><h1>New worker</h1>"
"<form action=\"/api/workers/%i\" method=\"POST\">"
"Name:<br><input type=\"text\" name=\"name\"><br>"
"Surname:<br><input type=\"text\" name=\"surname\"><br>"
"Birthday:<br><input type=\"text\" name=\"birthdate\"><br>"
"Experience:<br><input type=\"text\" name=\"experience\"><br>"
"Rating:<br><input type=\"text\" name=\"rating\"><br>"
"<input type=\"submit\" value=\"Send POST request\" /></form><br>"
"<p><a href=\"/workers/\">Back to all workers</a></p>"
"</body></html>", id);
sprintf(buffer,
"HTTP/1.1 200 OK\n"
"Content-Type: text/html\n"
"Content-Length: %i\r\n\r\n"
"\n%s", strlen(toSend), toSend);
socket_write_string(client, buffer);
socket_close(client);
}
开发者ID:Konimiks,项目名称:hello-world,代码行数:52,代码来源:server.c
示例11: server_GET_id_html
void server_GET_id_html(http_request_t req, socket_t* clientSocket, sqlite3 * db) {
int id;
if(strpbrk(req.uri,"-0123456789"))
{
id = atoi(strpbrk(req.uri,"-0123456789"));
if (!db_checkId (db, id))
{
socket_write_string(clientSocket,"Id not found");
return;
}
}
else
{
socket_write_string(clientSocket,"Wrong id");
return;
}
char text[1000] = "";
char buf[10000] = "<html>"
"<head>"
"<title>Lab4</title>"
"</head>"
"<body>"
"<h1>Teacher</h1>";
teacher_t temp = db_getTeacherById(db, id);
sprintf(text,"<p>Name:\t\t%s</p>"
"<p>Birthdate:\t%s</p>"
"<p>Years:\t\t%i</p>"
"<p>Rate:\t\t%.2f</p>"
"<p>\tSubjects:\t\t%i\n\n\n</p>"
"<p><a href=""/Teacher/"">To prev page</a></p>",
teacher_getName(temp),
teacher_getBirthdate(temp),
teacher_getYears(temp),
teacher_getRate(temp),
teacher_getSubjects(temp)
);
strcat(buf, text);
sprintf(text, "<p><a href=\"/Teacher/\" onclick=\"doDelete()\">Delete Teacher</a></p>"
"<script>"
"function doDelete(){"
"var xhttp=new XMLHttpRequest();"
"xhttp.open(\"DELETE\",\"/api/Teacher/%i\",true);"
"xhttp.send();"
"}"
"</script>", id);
strcat(buf, text);
strcat(buf, "</body>"
"</html>");
socket_write_string(clientSocket, buf);
}
开发者ID:SorochynskyiVladyslav,项目名称:CoursesRepository,代码行数:52,代码来源:server.c
示例12: server_postHTML
static void server_postHTML(socket_t* client)
{
char buffer[2000] = "";
char toSend[2000] = "";
strcpy(toSend,
"<html><head><title>Post</title></head>"
"<body><h1>New worker</h1>"
"<form action=\"/api/workers/\" method=\"POST\">"
"Name:<br><input type=\"text\" name=\"name\"><br>"
"Surname:<br><input type=\"text\" name=\"surname\"><br>"
"Salary:<br><input type=\"text\" name=\"salary\"><br>"
"Year:<br><input type=\"text\" name=\"year\"><br>"
"<input type=\"submit\" value=\"Send POST request\" /></form><br>"
"<p><a href=\"/workers/\">Back to all workers</a></p>"
"</body></html>");
sprintf(buffer,
"HTTP/1.1 200 OK\n"
"Content-Type: text/html\n"
"Content-Length: %i\r\n\r\n"
"\n%s", strlen(toSend), toSend);
socket_write_string(client, buffer);
socket_close(client);
}
开发者ID:gribo4eg,项目名称:repos1,代码行数:25,代码来源:server.c
示例13: server_pensionersRetPOST
void server_pensionersRetPOST(socket_t * client, http_request_t * req, resource_t * lt)
{
char buf[10240] = "";
char * pageText = "<form action=\"http://127.0.0.1:5000/pensioners\" method=\"POST\">"
"id:<br>"
"<input type=\"text\" name=\"id\" value='3'><br>"
"Name:<br>"
"<input type=\"text\" name=\"name\" value='Ivan'><br>"
"Surname:<br>"
"<input type=\"text\" name=\"surname\" value='Ivanov'><br>"
"Birthdate:<br>"
"<input type=\"text\" name=\"birthday\" value='1945-12-12'><br>"
"Pension:<br>"
"<input type=\"text\" name=\"pension\" value='2010.25'><br>"
"Experience:<br>"
"<input type=\"text\" name=\"experience\" value='60'><br><br>"
"<input type=\"submit\" value='Send POST request' />"
"</form>";
char * textHtml = textToBuf_HTML(pageText);
strcat(buf, textHtml);
free(textHtml);
socket_write_string(client, buf);
socket_close(client);
}
开发者ID:DariaDar,项目名称:Reposit,代码行数:26,代码来源:server.c
示例14: server_mastersHtmlPOST
void server_mastersHtmlPOST(socket_t * client, http_request_t * req, db_t * db)
{
char buffer[10240] = "";
if (strcmp(req->method, "GET") == 0)
{
char * pageText =
"<form action=\"http://127.0.0.1:5000/ScrumMasters\" method=\"POST\">"
"Name:<br>"
"<input type=\"text\" name=\"name\" value='Ivan'><br>"
"Surname:<br>"
"<input type=\"text\" name=\"surname\" value='Ivanov'><br>"
"CountK:<br>"
"<input type=\"text\" name=\"countK\" value='3'><br>"
"CountP:<br>"
"<input type=\"text\" name=\"countP\" value='3'><br><br>"
"<input type=\"submit\" value='Send POST request' />"
"</form>";
char * textHTML = textToHTML(pageText);
strcat(buffer, textHTML);
free(textHTML);
}
socket_write_string(client, buffer);
socket_close(client);
}
开发者ID:lemeshkob,项目名称:Repo1,代码行数:27,代码来源:server.c
示例15: post_new_row_post
void post_new_row_post(http_request_t req, socket_t * clientSocket,db_t * db)
{
char text[20];
strcpy(text,req.uri+10);
int check=db_insert(db, text,req);
char buf[1000];
if(check==0)
{
sprintf(buf,"<html>"
"<head>"
"<title>Page Title</title>"
"</head>"
"<body>"
"<p align=\"center\">INSSERT SUCCESS</p>"
"<p align=\"center\"><a href=\"/db/%s\" align=\"center\" >To %s</a></p>"
"</body>"
"</html>",text,text);
}
else
{
sprintf(buf,
"<html>"
"<head>"
"<title>Page Title</title>"
"</head>"
"<body>"
"<p align=\"center\">INSSERT ERROR</p>"
"<p align=\"center\"><a href=\"/db/%s\" align=\"center\" >To %s</a></p>"
"</body>"
"</html>",text,text);
}
socket_write_string(clientSocket,buf);
}
开发者ID:vitalik296,项目名称:CoursesRepo,代码行数:33,代码来源:server.c
示例16: edit_row
void edit_row(http_request_t req, socket_t * clientSocket,db_t * db)
{
int id=atoi(strpbrk(req.uri,"0123456789"));
ptrdiff_t nameLeng=(strpbrk(req.uri,"0123456789")-1)-(req.uri+10);
char *name=malloc(sizeof(char)*nameLeng+1);
memcpy(name,req.uri+10,nameLeng);
name[nameLeng]='\0';
sqlite3_stmt * stmt = NULL;
stmt=db_getrow(db,name,id);
char buf[5000]="";
char text[5000]="";
sprintf(text, "<html>"
"<body>"
"<form align=\"center\" action=""http://127.0.0.1:5000/db/edit/%s/%i"" method=""POST"">"
"Name:<br>"
"<input type=""text"" name=""name"" value=%s><br>"
"Surname:<br>"
"<input type=""text"" name=""surname"" value=%s ><br>"
"Age:<br>"
"<input type=""text"" name=""age"" value=%i><br>"
"<input type=""submit"" value='Send EDIT request' />"
"</form>"
"</body>",name,id,sqlite3_column_text(stmt, 0),sqlite3_column_text(stmt, 1),sqlite3_column_int(stmt, 2));
strcat(buf,text);
socket_write_string(clientSocket,buf);
}
开发者ID:vitalik296,项目名称:CoursesRepo,代码行数:30,代码来源:server.c
示例17: server_personalTask
static void server_personalTask(http_request_t request, socket_t* client, db_t* base)
{
char salaryReq[10], salaryVal[10], yearReq[10], yearVal[10], toSend[10000];
char* str = strtok(request.uri, "?&=");
str = strtok(NULL, "?&=");
strcpy(salaryReq, str); // salary_m || salary_l
str = strtok(NULL, "?&=");
strcpy(salaryVal, str); // salary value
str = strtok(NULL, "?&=");
strcpy(yearReq, str); // year_m || year_l
str = strtok(NULL, "?&=");
strcpy(yearVal, str); // year value
int count = db_countWorkers(base);
worker_t** workers[count];
for(int i = 0; i<count; i++)
workers[i] = worker_new();
str = db_personalTask(base, salaryReq, atoi(salaryVal), yearReq, atoi(yearVal), workers);
sprintf(toSend,
"HTTP/1.1 200 OK\n"
"Content-Type: application/json\n"
"Content-Length: %i\r\n\r\n"
"\n%s", strlen(str)+1, str);
for(int i = 0; i<count; i++)
worker_free(workers[i]);
socket_write_string(client, toSend);
socket_close(client);
}
开发者ID:gribo4eg,项目名称:repos1,代码行数:32,代码来源:server.c
示例18: server_teachers
void server_teachers(socket_t * client, http_request_t * req)
{
char buffer[10240];
if (strcmp(req->method, "GET") == 0) {
int amount = teacher_getSize();
char * teachersJSON = teacher_parseAllToJSON(teachers, amount);
sprintf(buffer,
"HTTP/1.1 200 OK\n"
"Content-Type: application/json\n"
"Content-Length: %zu\n"
"Connection: keep-alive\n"
"\n%s", strlen(teachersJSON), teachersJSON);
free(teachersJSON);
}
else {
char * errText = "Invalid command!";
sprintf(buffer,
"HTTP/1.1 404 \n"
"Content-Type: text/html\n"
"Content-Length: %zu\n"
"\n%s", strlen(errText), errText);
}
socket_write_string(client, buffer);
socket_close(client);
}
开发者ID:bbehrang,项目名称:CoursesRepo,代码行数:26,代码来源:server.c
示例19: server_Paste_html
void server_Paste_html(http_request_t req,socket_t* clientSocket,lanser ** freelancer)
{
char buf[5000]="";
char text[5000]="";
int id=0;
while(Freelanser_name_get(freelancer[id])!=NULL)
{
id++;
if(id>9)
{
strcat(buf,"<body>"
"Can't Post the new Freelancer<br>"
"<a href=""/Freelancer/"">Back</a>"
"</body>");
}
}
sprintf(text, "<html>"
"<body>"
"<form action=""http://127.0.0.1:5000/Freelancer/api/%i"" method=""POST"">"
"Name:<br>"
"<input type=""text"" name=""name""><br>"
"Surname:<br>"
"<input type=""text"" name=""surname"" ><br>"
"Age:<br>"
"<input type=""text"" name=""age""><br>"
"Date:<br>"
"<input type=""text"" name=""date""><br>"
"Salary:<br>"
"<input type=""text"" name=""salary""><br>"
"<input type=""submit"" value='Send POST request' />"
"</form>"
"</body>",id);
strcat(buf,text);
socket_write_string(clientSocket,buf);
}
开发者ID:vitalik296,项目名称:CoursesRepo,代码行数:35,代码来源:server.c
示例20: start_page
void start_page(socket_t * clientSocket,db_t * db)
{
char buf[10000]="<html>"
"<head>"
"<title>Page Title</title>"
"</head>"
"<body>"
"<h1>Tables</h1>";
int kil=get_kil(db);
char **text=malloc(sizeof(void*)*kil);
for(int j=0;j<kil;j++)
text[j]=malloc(50);
db_get_name(db,text);
int count =kil-1;
for(int i =0;i<count;i++)
{
char rep[1000];
sprintf(rep,"<p><a href=\"/db/%s\">%s</a></p>",text[i],text[i]);
strcat(buf,rep);
}
strcat(buf,"</body>"
"</html>");
socket_write_string(clientSocket,buf);
}
开发者ID:vitalik296,项目名称:CoursesRepo,代码行数:27,代码来源:server.c
注:本文中的socket_write_string函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论