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

📄 test3.c

📁 this gives details of the network programming
💻 C
字号:
// Netprog 2002 HW1 submission test program// This code tests layer 4//#include <stdio.h>#include <stdlib.h>#include <unistd.h>    // read() and write() prototypes are here//------------------------------------------------------------------// Sample layer 1 implementation based on a unix pipe.//int readfd,writefd;int generror=0;int writecount=0;void init_l1(void) {  static int first=1;  int fds[2];  if (! first) {    close(readfd);    close(writefd);  } else {    first=0;  }  writecount=0;  if (pipe(fds)==-1) {    printf("ERROR: Can't create pipe \n");    exit(1);  }  readfd = fds[0];  writefd = fds[1];}// sample l1_read just calls read on stdinint l1_read( char *b) {  if (generror==1) {    return(-1);      } else {    if (read(readfd,b,1)!=1)       return(-1);    else      return(1);  }}// sample l1_write just calls write to stdoutint l1_write(char b) {  writecount++;  if (generror==2) {    return(-1);  } else {    if ((generror==3) && (writecount==10)) {      // modify only the 10th byte      //  (aiming for the middle of the message)      b++;    }    if (write(writefd,&b,1)!=1)       return(-1);    else      return(1);  }}// Sample layer 2int l2_read(char *s, int max) {  int i;  char buf[10];  int len;  // read the length as 3 ASCII digits  for (i=0;i<3;i++) {    if (l1_read(buf+i)==-1) {      return(-1);    }  }  //convert string to int  buf[3]=0;  len = atoi(buf);  // make sure the message is not too large  if (len>max) {    return(-1);  }  // now read that many bytes  for (i=0;i<len;i++) {    if (l1_read(s+i)==-1) {      return(-1);    }  }  // everything seems OK  return(len);}int l2_write(char *s, int n) {  int i;  char buf[10];  if ((n>999)||(n<0)) return(-1);  // first send the length as 3 ASCII digits  sprintf(buf,"%03d",n);  for (i=0;i<3;i++) {    if (l1_write(buf[i])!=1) {      return(-1);    }  }  // now send the buffer  for (i=0;i<n;i++) {    if (l1_write(s[i])!=1) {      return(-1);    }  }    // everything seems fine - return n  return(n);}  //------------------------------------------------------------------// layer3 prototypesint l3_write(char *, int);int l3_read(char *, int);int main(int argc,char **argv) {  char buf[4000];  char inbuf[4000];  int len;  int err=0;  int i;  init_l1();  printf("l3 test 1 (sending ints): ");  for (i=0;i<1000;i++) {    if (l3_write((char *) &i, sizeof(int) )==-1) {      printf("l3_write error\n");      err=1;   break;    }    if ( (len=l3_read(buf,100))==-1) {      printf("l3_read error\n");      err=1;   break;    }    if (len!=sizeof(int)) {      printf("l3_read returns wrong length\n");      err=1;break;    }    if (*((int *)buf) != i) {      printf("l3_read value is wrong\n");      err=1;break;    }  }  if (! err) printf("OK\n");  init_l1(); err=0;  for (i=0;i<3000;i++)     buf[i]=i%256;  printf("l3 length test 800: ");  len=l3_write(buf,800);  if (len==-1) {      printf("l3_write error\n");      err=1;  } else {    if (len != 800) {      printf("l3_write returned wrong count\n");      err=1;    } else {      if ( (len=l3_read(inbuf,2000))==-1) {	printf("l3_read error\n");	err=1;      } else {	if (len!=800) {	  printf("l3_read returns wrong length\n");	  err=1;	} else {	  for (i=0;i<800;i++) {	    if (inbuf[i] != (char)(i%256)) {	      printf("l3_read value is wrong\n");	      err=1;break;	    }	  }	}      }    }  }  if (! err) printf("OK\n");  init_l1(); err=0;  printf("l3 length test 1000: ");  len=l3_write(buf,1000);  if (len==-1) {      printf("OK\n");  } else {    printf("Allows 1000 (should not)\n");  }  printf("l3 forced read error: ");  init_l1();  generror=1;  if ( (len=l3_read(buf,100))==-1) {    printf("OK\n");  } else {    printf("doesn't return error (it should!)\n");  }  printf("l3 forced write error: ");  init_l1();  generror=2;  if ( (len=l3_write(buf,100))==-1) {    printf("OK\n");  } else {    printf("doesn't return error (it should!)\n");  }  init_l1(); err=0;  generror=3;  printf("l3 transmission error test: ");  len=l3_write(buf,30);  if (len==-1) {      printf("l3_write error\n");      err=1;  } else {    if (len != 30) {      printf("l3_write returned wrong count\n");      err=1;    } else {      if ( (len=l3_read(inbuf,2000))==-1) {	printf("OK\n");      } else {	printf("Didn't find the problem\n");      }    }  }  return(0);}      

⌨️ 快捷键说明

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