免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1186 | 回复: 6
打印 上一主题 下一主题

stevens的UNIX网络编程上例程联不上,大家帮忙看一下 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-05-20 16:42 |只看该作者 |倒序浏览
就是那个读服务器时间的程序,编译成功,可以服务器没法accept到客户端的connect,建立不了联接,没找出问题在哪儿,麻烦各位XDJM们帮忙看一下问题在哪儿,多谢多谢!!

论坛徽章:
0
2 [报告]
发表于 2004-05-20 16:43 |只看该作者

stevens的UNIX网络编程上例程联不上,大家帮忙看一下

服务器端程序:

ser.c

#include "unp.h"

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);

        printf("socket connection over\n";

        bzero(&servaddr,sizeof(servaddr));
        servaddr.sin_family = AF_INET;
        servaddr.sin_port = htons(SERV_PORT);
        servaddr.sin_addr.s_addr = htonl(INADDR_ANY);

        bind(listenfd,(SA *)&servaddr,sizeof(servaddr));
        printf("bind over\n";
        listen(listenfd,LISTENQ);
        printf("listen over\n";
        for(;
        {
                printf("accepting...\n";
                connfd = accept(listenfd,(SA *)NULL,NULL);
                printf("accepted!!!\n";
                ticks=time(NULL);
                snprintf(buff,sizeof(buff),"%.24s\r\n",ctime(&ticks));
                write(connfd,buff,strlen(buff));
                printf("write over\n";
                close(connfd);
        }
}

论坛徽章:
0
3 [报告]
发表于 2004-05-20 16:44 |只看该作者

stevens的UNIX网络编程上例程联不上,大家帮忙看一下

客户端程序

cli.c

#include "unp.h"

int
main(int argc,char** argv)
{
        int     sockfd,n;
        char    recvline[MAXLINE+1];
        struct  sockaddr_in servaddr;

        if(argc != 2)
        {
                printf("bad argument\n";
                exit(1);
        }

        if(sockfd=socket(AF_INET,SOCK_STREAM,0)<0)
        {
                printf("socket error\n";
                exit(1);
        }
        bzero(&servaddr,sizeof(servaddr));
        servaddr.sin_family = AF_INET;
        servaddr.sin_port = htons(SERV_PORT);
        printf("socket connection over\n";
        if(inet_pton(AF_INET,argv[1],&servaddr.sin_addr)<=0)
        {
                printf("inet_pton error\n";
                exit(1);
        }

        printf("inet_pton over\n";
        while(1)
        {
                if(connect(sockfd,(SA *)&servaddr,sizeof(servaddr)) < 0)
                {
                        sleep(1);
                        printf("connect error\n";
                        continue;
                }
                else
                        break;
        }
        printf("connect over\n";
        while((n=read(sockfd,recvline,MAXLINE)) >; 0)
        {
                recvline[n]=0;
                if(fputs(recvline,stdout) == EOF)
                {
                        printf("fputs error\n";
                        exit(1);
                }
        }

printf("read and fputs over\n";
        if(n < 0)
        {
                printf("read error\n";
                exit(1);
        }
        exit(0);
}

论坛徽章:
0
4 [报告]
发表于 2004-05-20 16:45 |只看该作者

stevens的UNIX网络编程上例程联不上,大家帮忙看一下

自己摘写的stevens的unp.h的一部分:

#include <stdio.h>;
#include <time.h>;
#include <sys/errno.h>;
#include <sys/types.h>;
#include <sys/socket.h>;
#include <netinet/in.h>;
#include <arpa/inet.h>;
#include <netdb.h>;

#define MAXLINE         4096
#define LISTENQ         1024
#define SERV_PORT       9877
#define SA              struct sockaddr

论坛徽章:
0
5 [报告]
发表于 2004-05-20 16:48 |只看该作者

stevens的UNIX网络编程上例程联不上,大家帮忙看一下

多谢各位了

论坛徽章:
0
6 [报告]
发表于 2004-05-20 23:06 |只看该作者

stevens的UNIX网络编程上例程联不上,大家帮忙看一下

楼主你 cli.c 有错

  1. if(sockfd=socket(AF_INET,SOCK_STREAM,0)<0)
  2. {
  3. printf("socket error\n");
  4. exit(1);
  5. }
复制代码


少了两个小括号
  1. if ((sockfd = socket(AF_INET, SOCK_STREAM, 0) < 0)
  2. {
  3.     printf("socket error\n");
  4.     exit(1);
  5. }
复制代码


要是不习惯的话,最好这样写,不容易错
  1. sockfd = socket(AF_INET, SOCK_STREAM, 0);
  2. if (sockfd < 0)
  3. {
  4.     printf("socket error\n");
  5.     exit(1);
  6. }
复制代码

论坛徽章:
0
7 [报告]
发表于 2004-05-21 09:26 |只看该作者

stevens的UNIX网络编程上例程联不上,大家帮忙看一下

多谢楼上,写的太粗心了,呵呵,多谢了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP