第一篇
A simple Daytime Client
#include "unp.h"
int main(int argc, char **argv)
{
int sockfd, n;
char recvline[MAXLINE +1 ];
struct sockaddr_in servaddr;
if (argc != 2)
err_quit("usage: a.out ");
/*Create an Internet(AF_INET) stream(SOCK_STREAM) socket */
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
err_sys("socket error");
/*Fill in an Internet socket address structure with
the server's IP address and port number.
The IP address and port number fields in the structure
must be in specific formats:we call the library function
"htons" and "inet_pton" to convert into the proper format*/
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)
err_quit("inet_pton error for %s", argv[1]);
/*Connect with serve*/
if (connect(sockfd, (SA*)&servaddr, sizeof(servaddr)) <0)
err_sys("connect error");
/*Read and display serve's reply*/
while((n=read(sockfd, recvline, MAXLINE)) >0) {
recvline[n] = 0;
if (fputs(recvline, stdout) == EOF)
err_sys("fputs error");
}
if (n<0)
err_sys("read error");
exit(0);
}
A simple Daytime Server
#include "unp.h"
#include
int main(int argc, char **argv)
{
int listenfd, connfd;
struct sockaddr_in servaddr;
char buff[MAXLINE];
time_t ticks;
/*Create a TCP socket*/
listenfd = Socket(AF_INET, SOCK_SEREAM, 0);
/*The serve's well-known port is bound to the socket
by filling in an Internet socket address structure
and calling "bind".We specify the IP address as
INADDR_ANY,which allows the server to accept a client
connection on any interface, in case the server host
has multiple interfaces;*/
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(13);
Bind(listenfd, (SA*)&servaddr, sizeof(servaddr);
/*By calling listen the socket is converted into a listening
socket ,on which incoming connections from clients will be
accepted by the kernel.The contant LISTENQ is from our
unp.h header. It specifies the maximum number of client
connections that the kernel will queue for this listening
descriptor.*/
Listen(listenfd, LISTENQ);
/*The server process is put to sleep in the call to "accept",
waiting for a client connection to arrive and be accepted.*/
for(;;) {
connfd = Accept(listenfd, (SA*)NULL, NULL);
ticks = time(NULL);
snprintf(buff, sizeof(buff), "%.24s\r\n", ctime(&ticks));
Write(connfd, buff, strlen(buff));
Close(connfd);
}
}