zoukankan      html  css  js  c++  java
  • Unix网络编程---第一次作业

    Unix网络编程---第一次作业

     

    要求:

    客户端:从命令行读入服务器的IP地址;并连接到服务器;

    服务器端:    接受客户的连接请求,并显示客户的IP地址和端口号。

    实现代码:

    1、客户端程序:my_client.c

    #include <sys/socket.h>

    #include <sys/types.h>

    #include <netinet/in.h>

    #include <unistd.h>

    #include <stdio.h>

    #define  UPORT 8088 /*This is the port number used by me */

    #define  MAXLINE 256

    int

    main(int argc, char **argv)

    {

           int                               sockfd, n;

           char                      recvline[MAXLINE + 1];

           struct sockaddr_in  servaddr;

           if (argc != 2){

                  perror("usage: a.out <IPaddress>");

                  exit(-1);

           }

           if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){

                  perror("socket error");

                  exit(-1);

           }

           

           bzero(&servaddr, sizeof(servaddr));

           servaddr.sin_family = AF_INET;

           servaddr.sin_port   = htons(UPORT);  /* daytime server */

           if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0){

                  printf("inet_pton error for %s", argv[1]);

                  exit(-1);

           }

           if (connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0){

                  perror("connect error");

                  exit(-1);

           }

           while ( (n = read(sockfd, recvline, MAXLINE)) > 0) {

                  recvline[n] =''; // '' ASXII code is 0, so also can use 0;

                  if (fputs(recvline, stdout) == EOF){

                         perror("fputs error");

                         exit(-1);

                  }

           }

           if (n < 0)

                  perror("read error");

           exit(0);

    }

    2、服务端程序:my_server.c

    #include <sys/socket.h>

    #include <sys/types.h>/*The funcion sizeof,socklen_t need*/

    #include <netinet/in.h>/*The funcion sockaddr_in need*/

    #include <unistd.h>

    #include <arpa/inet.h>/*The funcion inet_ntoa need*/

    #include <string.h>/*The funcion strlen need*/

    #define  UPORT 8088 /*This is the port number used by me */

    #define  MAXLINE 256

    #define  LISTENQ 32

    int

    main(int argc, char **argv)

    {

           int                               listenfd, connfd,reuse;

           struct sockaddr_in  servaddr, cliaddr;

           char                      buff[MAXLINE];

           socklen_t  addrlen;

           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(UPORT);       /* server port setting */

          

            if( setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))==-1){

                  perror("There is an error occured when the program set REUSEADDR symbol");

                  return -1;

           }

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

                  perror("%s ","bind error");

                  exit(-1);

           }

          

           listen(listenfd, LISTENQ);

           addrlen=sizeof(cliaddr);

           for ( ; ; ) {

                  if((connfd = accept(listenfd, (struct sockaddr *) &cliaddr, &addrlen))==-1){

                         perror("%s ","An error occured while tring to creat a connfd! ");

                         exit(-1);

                  }

                   snprintf(buff, sizeof(buff), "%s %s:%d ","The connection is successful, the ip address and port you are using are",inet_ntoa(cliaddr.sin_addr),cliaddr.sin_port );

    printf("the new connection address is:%s:%d ", inet_ntoa(cliaddr.sin_addr), cliaddr.sin_port);

                    write(connfd, buff, strlen(buff));

                  //send(connfd,"ok ",4,0);

                  close(connfd);

           }

    }

    运行截图

    编译:gcc my_client.c -o my_client

    gcc my_server.c -o my_server

    服务端运行:./my_server

    客户端运行:./my_client 192.168.1.119

    本实验是在两台虚拟机上操作,服务端ip为192.168.1.119,客户端ip为192.168.1.120

    1、客户端:

     

    2、服务端:

     

     

     总结

    1、 注意细节,免走弯路

    2、 了解原理,举一反三

  • 相关阅读:
    JavaScript对象模型执行模型
    jQuery+CSS实现的图片滚动效果
    js笔记作用域(执行上下文[execution context],活动对象) 闭包
    JavaScript中的值类型和引用类型
    程序员第一定律:关于技能与收入
    JavaScript 秘密花园 http://bonsaiden.github.com/JavaScriptGarden/zh/
    程序员三大世界观 如何看待HTML5
    10 条建议让你创建更好的 jQuery 插件
    html 打印
    面向对象的 Javascript (声明篇)
  • 原文地址:https://www.cnblogs.com/lwhp/p/4990246.html
Copyright © 2011-2022 走看看