服务器read怎么做(服务器配置read)

linux网络编程中如何实现服务器端多个read()和客户端write( )

TCP通信的模式如下图,比较固定,对着图编代码就可以了:

服务器的main函数:

int main(int argc, char **argv)

{

 int listenfd, connfd;

 pid_t childpid;

 socklen_t clilen;

 struct sockaddr_in cliaddr, servaddr; //IPv4 address

 /*socket*/

 listenfd = socket(AF_INET, SOCK_STREAM, 0);//创建一个TCP的socket

 if (-1 == listenfd) {

  perror(\"socket erro.\");

  return -1;

 }

 /*bind*/

 //首先初始化server的IP地址和端口,然后再与刚刚创建的socket绑定

 bzero(servaddr, sizeof(servaddr));

 servaddr.sin_family = AF_INET;//设置协议簇

 servaddr.sin_addr.s_addr = htonl(INADDR_ANY);//绑定本机的网卡

 servaddr.sin_port = htons(1234);//绑定端口号,端口号可以随便取,大于1024就可以了

 if (-1 == bind(listenfd, (struct sockaddr *)servaddr, sizeof(servaddr))) {

  perror(\"bind error.\");

  return -1;

 }

 /*listen*/

 //到这里已经有了一个绑定了IP地址和端口号的socket了,但是这个socket是个主动的socket,

 //而作为server需要的是一个等待别的接入的被动的socket,所以得调用listen将这个socket设置为监听状态

 //第二个参数表示服务器正在处理客户接入时的等待队列长度。

 if (-1 == listen(listenfd, 10)) {

  perror(\"listen error.\");

  return -1;

 }

 while (1) {

  clilen = sizeof(cliaddr);

  //调用accept等待客户的接入,同时accept会用第二个参数返回客户的IP地址,

  //通过第三个参数返回IP地址的实际大小,同时这个参数也是个值-结构参数,也就是

  //在传递这个参数的时候,先给这个参数一个初始的值,然后函数中会根据具体的情况修改这个值,

  //所以这里传递的是指针。

  //当客户接入后,将返回一个成功和客服连接的socket描述符,通过读写这个socket即可实现和客户的通信了

  connfd = accept(listenfd, (struct sockaddr *)cliaddr, clilen);

  if (-1 == connfd) {

   if (EINTR == errno)

    continue;

   perror(\"accept error.\");

   return -1;

  }

  //通过fock创建子进程来处理客户请求,这里只是显示客户的IP地址、端口号和发送的文字,

  //并将客户发送的文字回传给客户。

  if (0 == (childpid=fork())) {//fock返回0 说明是子进程

   //这里并没有关闭服务器的监听socket,只是将其引用计数减一,因为fork出来的子进程对父进程做了拷贝,

   //所以这个监听socket的引用计数将由1变成2,而内核只有在一个socket的引用计数变为0才回去关闭它

   close(listenfd);

   //通过和客户连接的socket和客户通信     

   str_echo(connfd, cliaddr);

   return 0;

  }

  //父进程将和客户连接的socket的引用计数减一,同样并没有关闭这个socket

  close(connfd);

 }

 return 0;

}

服务器处理客户请求:

#define BSIZE 100

void str_echo(int sockfd, struct sockaddr_in cliaddr)

{

 ssize_t n;

 char buf[BSIZE];

 

 while ((n=read(sockfd, buf, BSIZE))) {//读取客户发送的信息

  buf[n] = \'\\0\';

  printf(\"IP: %s, PORT: %d: %s\\n\", \\

    inet_ntoa(cliaddr), ntohs(cliaddr.sin_port), buf); //输出信息

  n_write(sockfd, buf, n);//将受到的信息发送回客户,n_write的实现下面给出

 }

}

客户端程序相对简单:

int main(int argc, char **argv)

{

 int sockfd;

 struct sockaddr_in servaddr;

 

 if (2 != argc) {

  printf(\"usage: ./client 127.0.0.1\");//

  return -1;

 }

 /*socket*/

 sockfd = socket(AF_INET, SOCK_STREAM, 0); //创建一个socket

 if (-1 == sockfd) {

  perror(\"socket error.\");

  return -1;

 }

 /*connect*/

 //首先初始化要连接的服务器的IP地址和端口号,然后调用connect去连接这个服务器

 bzero(servaddr, sizeof(servaddr));

 servaddr.sin_family = AF_INET;

 servaddr.sin_port = htons(1234);

 inet_pton(AF_INET, argv[1], servaddr.sin_addr);

 if (-1 == connect(sockfd, (struct sockaddr *)servaddr, sizeof(servaddr))) {

  perror(\"connect error.\");

  return -1;

 }

 //连接成功后就可以通过这个socket来和服务器通信了

 str_cli(stdin, sockfd);

return 0;

}

n_write 和 readline

/*write n bytes to fd*/

ssize_t n_write (int fd, void *buf, size_t n)

{

 size_t nleft = n;

 ssize_t nwriten;

 char *bufp = buf;

while (nleft 0) {

  if ((nwriten = write (fd, bufp, nleft)) = 0) {

   if (EINTR == errno)

    nwriten = 0;

   else

    return -1;

  }

nleft -= nwriten;

  bufp += nwriten;

 }

return n;

}

/*read line from fd*/

ssize_t readline (int fd, void *buf, size_t maxlen)

{

 ssize_t n, rc;

 char c, *bufp;

bufp = buf;

 for (n = 1; n maxlen; n ++) {

again:

  if (1 == (rc = read (fd, c, 1))) {

   *bufp ++ = c;

   if (\'\\n\' == c)

    break;  /*newline is stored*/

  } else if (rc == 0) {

   *bufp = 0;

   return (n - 1);  /*EOF, n-1 bytes were read*/

  } else {

   if (EINTR == errno) /*interrupt*/

    goto again;

   return -1;  /*Erro, set the errno by read ()*/

  }

 }

 *bufp = 0;

 return n;

}

运行结果:

因为客户端没有指定IP地址和端口,所以其IP和端口都是内核随机分配的。

服务器怎么做RAID?

1、首先服务器开机,出现下图界面按F10。

2、然后在下图中选择Perform Maintenance。

3、点击Arry Configuration Utility。

4、左侧下面是未分配的磁盘,选中Unassigned Drives然后点击Create Array。

5、下图中1和2两个磁盘已经做过阵列,所以在右下脚显示3到8的磁盘容量,选择3到5(也可以全部选择),然后点击OK。完成。

组成部分:

RAID磁盘阵列是由很多价格较便宜的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。

磁盘阵列还能利用同位检查(Parity Check)的观念,在数组中任意一个硬盘故障时,仍可读出数据,在数据重构时,将数据经计算后重新置入新硬盘中。

磁盘阵列作为独立系统在主机外直连或通过网络与主机相连。磁盘阵列有多个端口可以被不同主机或不同端口连接。一个主机连接阵列的不同端口可提升传输速度。

服务器出现Read timed out怎么解决?

出现 Read timed out 是因为连接时间超时异常导致的,在管理网站里面的高级设置进行修改即可,详细步骤:

1、右键右下角的时间选择显示搜索框。

2、在搜索框中输入IIS点击进入。

3、然后展开网站,找到要处理的网站。

4、右键单击选择管理网站下面的高级设置。

5、然后展开限制选项,如下图所示。

6、最后在连接超时里面输入时间就可以了。

未经允许不得转载:便宜VPS网 » 服务器read怎么做(服务器配置read)