[置顶] Unix 网络编程系列05

请转载者,尊重作者(xiaobin)的劳动成果!

在第一个实例我们已经编写了客户端程序,本篇编写他的姊妹篇---服务器端程序。

基本上,服务器端程序既是客户端程序的“反”程序!

1. 建立socket通信

2. 初始化servaddr

    2.1 置0

    2.2 设置协议族

    2.3 设置端口

    2.4 设置ip地址为本机所有地址/任意地址

3. 绑定socket的端口

4. 监听socket

以上2.4, 3, 4是为客户端的connect做准备的。

循环执行:

5. 接受连接

6. 发送数据

7. 关闭连接


第二个运行实例!

daytimetcpsrv.c

#include "./lib/unp.h"
#include <time.h>

#define LISTEN_QUEUE 20

int main(int argc, char **argv)
{
  int     listenfd, connfd;
  struct  sockaddr_in servaddr;
  char    buff[MAXLINE];
  time_t  ticks;
  
  listenfd = socket(AF_INET, SOCK_STREAM, 0);
  
  bzero(&servaddr, sizeof(servaddr));
  servaddr.sin_family = AF_INET;
  servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
  servaddr.sin_port = htons(13);
  
  bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr));

  listen(listenfd, LISTEN_QUEUE);
  
  for ( ; ; ) {
    connfd = accept(listenfd, (struct sockaddr *) NULL, NULL);
    
    time(&ticks);
    snprintf(buff, sizeof(buff), "%s\n", ctime(&ticks));
    
    write(connfd, buff, strlen(buff));
    
    close(connfd);
  }
}

编译:

root@xiaobin-desktop:/home/xiaobin/temp# cc daytimetcpsrv.c -o daytime1.out

运行:

root@xiaobin-desktop:/home/xiaobin/temp# ./daytime1.out

-------------------------------------------------------------------------end-------

测试:

使用windows的telnet来测试我们程序是否运行正常,

在命令提示符中输入:telnet 192.168.101.128 13

(其中192.168.101.128为服务器ip地址;13既是上面程序中我们使用的端口号)


如果出现图中红色方框中的内容,既表示服务器端程序运行正常。


原文地址:https://www.cnblogs.com/javawebsoa/p/3028404.html