Chinaunix
标题:
daytimetcpserver不能bind
[打印本页]
作者:
LaoLiulaoliu
时间:
2009-05-01 19:19
标题:
daytimetcpserver不能bind
UNIX® Network Programming Volume 1, Third Edition: The Sockets Networking API
第一章的内容,我把server,client源码以自己的方式抄写了一遍,便于理解。
$ cat daytimetcpcli.c
#define MAXLINE 4096
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>
int main(int argc, char **argv)
{
int sockfd, n;
char recvline[MAXLINE + 1];
struct sockaddr_in servaddr;
if(argc != 2)
{
printf("usage: a.out <IPaddress>");
exit(1);
}
if( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
printf("socket error");
exit(1);
}
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(13);
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)
{
printf("connect error");
exit(1);
}
while( (n = read(sockfd, recvline, MAXLINE)) > 0)
{
recvline[n] = 0;
if(fputs(recvline, stdout) == EOF)
{
printf("fputs error");
exit(1);
}
}
if(n < 0)
{
printf("read error");
exit(1);
}
exit(0);
}
$ cat daytimetcpsrv.c
#define MAXLINE 4096
#include <netinet/in.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <errno.h>
int main(int argc, char **argv)
{
int listenfd, connfd, listenq = 1024;
struct sockaddr_in servaddr;
char buff[MAXLINE];
time_t ticks;
if ( (listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
printf("socket error");
exit(1);
}
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(13);
if (bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0)
{
printf("bind error");
exit(1);
}
if (listen(listenfd, listenq) < 0)
{
printf("listen error");
exit(1);
}
for ( ; ; )
{
if ( (connfd = accept(listenfd, (struct sockaddr *)NULL, NULL)) < 0)
{
if (errno == EPROTO || errno == ECONNABORTED)
continue;
else
{
printf("accept error");
exit(1);
}
}
ticks = time(NULL);
snprintf(buff, sizeof(buff), "%.24s\r\n", ctime(&ticks));
if (write(connfd, buff, strlen(buff)) != strlen(buff))
{
printf("close error");
exit(1);
}
if (close(connfd) == -1)
{
printf("close error");
exit(1);
}
}
}
我想的是编译:
$ gcc -o daytimetcpcli daytimetcpcli.c
$ gcc -o daytimetcpsrv daytimetcpsrv.c
然后
$ ./daytimetcpsrv
$ ./daytimetcpcli 127.0.0.1
可是在执行./daytimetcpsrv的时候就总是有错误。
bind error
但是我是按照书上来的,不知道为什么不能bind.
求教,求教!
谢谢。
作者:
xinglp
时间:
2009-05-01 19:25
sudo ./daytimetcpsrv
作者:
LaoLiulaoliu
时间:
2009-05-01 19:29
xinglp太感谢了,解决!
那代码就供大家参考喽!
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2