⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 net_test.c

📁 在 linux平台上的网页编程的模板
💻 C
字号:
#include "cs_config.h"#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <sys/wait.h>#include "util/neo_misc.h"#include "util/neo_err.h"#include "util/neo_net.h"#include "util/ulist.h"#include "util/neo_rand.h"#define TEST_PORT 46032#define COUNT 10000typedef struct _rand_thing {  int is_num;  int n;  char *s;} RAND_THING;NEOERR *client_proc(int port, ULIST *stuff){  NEOERR *err;  NSOCK *nsock;  int x;  RAND_THING *thing;  sleep(1);  ne_warn("[c] Connecting to port %d", port);  err = ne_net_connect(&nsock, "localhost", port, 10, 10);  if (err) return nerr_pass(err);  ne_warn("[c] Connected.");  do  {    err = ne_net_write_int(nsock, uListLength(stuff));    if (err) break;    for (x = 0; x < uListLength(stuff); x++)    {      err = uListGet(stuff, x, (void *)&thing);      if (err) break;      if (thing->is_num)      {	err = ne_net_write_int(nsock, thing->n);	/* ne_warn("[c] Sending %d", thing->n); */      }      else      {	err = ne_net_write_str(nsock, thing->s);	/* ne_warn("[c] Sending %s", thing->s); */      }      if (err) break;    }  } while (0);  ne_net_close(&nsock);  return nerr_pass(err);}NEOERR *server_proc(int port, ULIST *stuff){  NEOERR *err;  int server;  NSOCK *nsock;  int x, i;  RAND_THING *thing;  char *s;  ne_warn("[s] Listening on port %d", port);  err = ne_net_listen(port, &server);  if (err) return nerr_pass(err);  err = ne_net_accept(&nsock, server, 10);  if (err) return nerr_pass(err);  ne_warn("[s] Connection.");  do {    err = ne_net_read_int(nsock, &x);    if (err) break;    if (x != uListLength(stuff))    {      err = nerr_raise(NERR_ASSERT, "Incoming length is not equal to expected length: %d != %d", x, uListLength(stuff));      break;    }    for (x = 0; x < uListLength(stuff); x++)    {      err = uListGet(stuff, x, (void *)&thing);      if (err) break;      if (thing->is_num)      {	err = ne_net_read_int(nsock, &i);	if (err) break;	/* ne_warn("[s] Received %d", i); */	if (thing->n != i)	{	  err = nerr_raise(NERR_ASSERT, "Incoming %d number is not equal to expected: %d != %d", x, i, thing->n);	  break;	}      }      else      {	err = ne_net_read_str_alloc(nsock, &s, NULL);	if (err) break;	/* ne_warn("[s] Received %s", s); */	if (strcmp(s, thing->s))	{	  err = nerr_raise(NERR_ASSERT, "Incoming %d string is not equal to expected: '%s' != '%s'", x, s, thing->s);	  break;	}	free(s);      }      printf("\rs");    }  } while (0);  ne_net_close(&nsock);  return nerr_pass(err);}NEOERR *run_test(void){  NEOERR *err;  ULIST *stuff;  char word[64000];  RAND_THING *thing;  pid_t child;  int x;  ne_warn("starting net_test");  ne_warn("generating random list");  err = uListInit(&stuff, COUNT, 0);  if (err) return nerr_pass(err);  for (x = 0; x < COUNT; x++)  {    thing = (RAND_THING *) calloc(1, sizeof(RAND_THING));    if (neo_rand(100) > 50)    {      thing->is_num = 1;      thing->n = neo_rand(1000000);    }    else    {      neo_rand_word(word, sizeof(word));      thing->s = strdup(word);    }    err = uListAppend(stuff, thing);    if (err) return nerr_pass(err);  }  child = fork();  if (!child)  {    /* child */    return nerr_pass(client_proc(TEST_PORT, stuff));  }  /* parent */  err = server_proc(TEST_PORT, stuff);  if (!err) waitpid(child, NULL, 0);  return nerr_pass(err);}int main(int argc, char **argv){  NEOERR *err;  nerr_init();  err = run_test();  if (err)   {      nerr_log_error(err);      return -1;  }  return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -