listen()
#include <sys/socket.h>
int listen(int s, int backlog)
参数:
s:用于监听的套接口
backlog:连接队列的长度
如果函数调用成功,返回0,否则返回-1,同时可在errno中查到错误原因.
backlog是在Linux内核中建立一个监听队列,指的是接到了连接请求,但无法立即处理,所以连接请求被挂起.
accept()
#include <sys/types.h>
#include <sys/socket.h>
int accept(int s, struct sockaddr *addr, int *addrlen)
参数:
s:用于监听的套接口
addr:用于接受客户套接口地址的地址结构
addrlen:指向接受套接口地址缓存最大长度的指针.这个参数既是输入参数也是输出参数,作为输入参数时它指定了addr的最大长度,作为输出参数时它表示地址的实际长度.
如果调用成功返回0,失败返回-1,同时可在errno中查到错误原因.
server.c
client.c
#include <sys/socket.h>
int listen(int s, int backlog)
参数:
s:用于监听的套接口
backlog:连接队列的长度
如果函数调用成功,返回0,否则返回-1,同时可在errno中查到错误原因.
backlog是在Linux内核中建立一个监听队列,指的是接到了连接请求,但无法立即处理,所以连接请求被挂起.
accept()
#include <sys/types.h>
#include <sys/socket.h>
int accept(int s, struct sockaddr *addr, int *addrlen)
参数:
s:用于监听的套接口
addr:用于接受客户套接口地址的地址结构
addrlen:指向接受套接口地址缓存最大长度的指针.这个参数既是输入参数也是输出参数,作为输入参数时它指定了addr的最大长度,作为输出参数时它表示地址的实际长度.
如果调用成功返回0,失败返回-1,同时可在errno中查到错误原因.
server.c
#include
<
stdio.h
>
#include < unistd.h >
#include < stdlib.h >
#include < errno.h >
#include < string .h >
#include < sys / types.h >
#include < sys / socket.h >
#include < netinet / in .h >
#include < arpa / inet.h >
#include < netdb.h >
#include < time.h >
static void bail( const char * on_what)
{
if (errno != 0)
{
fputs(strerror(errno), stderr);
fputs(":",stderr);
}
fputs(on_what, stderr);
fputc(' ', stderr);
exit(1);
}
int main( int argc, char * argv[])
{
int z;
char *srvr_addr = NULL;
char *srvr_port = "9099";
struct sockaddr_in adr_srvr;
struct sockaddr_in adr_clnt;
socklen_t len_inet;
int s;
int c;
int n;
time_t td;
char dtbuf[128];
if (argc >= 2)
{
srvr_addr = argv[1];
}else
{
srvr_addr = "127.0.0.1";
}
if (argc >= 3)
srvr_port = argv[2];
s = socket(PF_INET, SOCK_STREAM, 0);
if (-1 == s)
bail("socket()");
memset(&adr_srvr, 0, sizeof(adr_srvr));
adr_srvr.sin_family = AF_INET;
adr_srvr.sin_port = htons(atoi(srvr_port));
if (strcmp(srvr_addr, "*") != 0)
{
adr_srvr.sin_addr.s_addr = inet_addr(srvr_addr);
if (adr_srvr.sin_addr.s_addr == INADDR_NONE)
bail("bad address");
}else
{
adr_srvr.sin_addr.s_addr = INADDR_ANY;
}
len_inet = sizeof(adr_srvr);
z = bind(s, (struct sockaddr *)&adr_srvr, len_inet);
if (-1 == z)
bail("bind()");
z = listen(s, 10);
if (-1 == z)
bail("listen()");
for (;;)
{
len_inet = sizeof(adr_clnt);
c = accept(s, (struct sockaddr *)&adr_clnt, &len_inet);
if (-1 == c)
bail("accept()");
time(&td);
n = (int)strftime(dtbuf, sizeof(dtbuf),
"%A %b %d %H:%M:%S %Y ", localtime(&td));
z = write(c, dtbuf, n);
if (-1 == z)
bail("write()");
close(c);
}
return 0;
}
#include < unistd.h >
#include < stdlib.h >
#include < errno.h >
#include < string .h >
#include < sys / types.h >
#include < sys / socket.h >
#include < netinet / in .h >
#include < arpa / inet.h >
#include < netdb.h >
#include < time.h >
static void bail( const char * on_what)
{
if (errno != 0)
{
fputs(strerror(errno), stderr);
fputs(":",stderr);
}
fputs(on_what, stderr);
fputc(' ', stderr);
exit(1);
}
int main( int argc, char * argv[])
{
int z;
char *srvr_addr = NULL;
char *srvr_port = "9099";
struct sockaddr_in adr_srvr;
struct sockaddr_in adr_clnt;
socklen_t len_inet;
int s;
int c;
int n;
time_t td;
char dtbuf[128];
if (argc >= 2)
{
srvr_addr = argv[1];
}else
{
srvr_addr = "127.0.0.1";
}
if (argc >= 3)
srvr_port = argv[2];
s = socket(PF_INET, SOCK_STREAM, 0);
if (-1 == s)
bail("socket()");
memset(&adr_srvr, 0, sizeof(adr_srvr));
adr_srvr.sin_family = AF_INET;
adr_srvr.sin_port = htons(atoi(srvr_port));
if (strcmp(srvr_addr, "*") != 0)
{
adr_srvr.sin_addr.s_addr = inet_addr(srvr_addr);
if (adr_srvr.sin_addr.s_addr == INADDR_NONE)
bail("bad address");
}else
{
adr_srvr.sin_addr.s_addr = INADDR_ANY;
}
len_inet = sizeof(adr_srvr);
z = bind(s, (struct sockaddr *)&adr_srvr, len_inet);
if (-1 == z)
bail("bind()");
z = listen(s, 10);
if (-1 == z)
bail("listen()");
for (;;)
{
len_inet = sizeof(adr_clnt);
c = accept(s, (struct sockaddr *)&adr_clnt, &len_inet);
if (-1 == c)
bail("accept()");
time(&td);
n = (int)strftime(dtbuf, sizeof(dtbuf),
"%A %b %d %H:%M:%S %Y ", localtime(&td));
z = write(c, dtbuf, n);
if (-1 == z)
bail("write()");
close(c);
}
return 0;
}
client.c
#include
<
stdio.h
>
#include < unistd.h >
#include < stdlib.h >
#include < errno.h >
#include < string .h >
#include < sys / types.h >
#include < sys / socket.h >
#include < netinet / in .h >
#include < arpa / inet.h >
#include < netdb.h >
static void bail( const char * on_what)
{
if (errno != 0)
{
fputs(strerror(errno), stderr);
fputs(":",stderr);
}
fputs(on_what, stderr);
fputc(' ', stderr);
exit(1);
}
int main( int argc, char * argv[])
{
int z;
char *srvr_addr = NULL;
char *srvr_port = "9099";
struct sockaddr_in adr_srvr;
int len_inet;
int s;
time_t td;
char dtbuf[128];
if (argc >= 2)
{
srvr_addr = argv[1];
}else
{
srvr_addr = "127.0.0.1";
}
if (argc >= 3)
srvr_port = argv[2];
s = socket(PF_INET, SOCK_STREAM, 0);
if (-1 == s)
bail("socket()");
memset(&adr_srvr, 0, sizeof(adr_srvr));
adr_srvr.sin_family = AF_INET;
adr_srvr.sin_port = htons(atoi(srvr_port));
adr_srvr.sin_addr.s_addr = inet_addr(srvr_addr);
if (adr_srvr.sin_addr.s_addr == INADDR_NONE)
bail("bad address");
len_inet = sizeof(adr_srvr);
z = connect(s, (struct sockaddr *)&adr_srvr, (socklen_t)len_inet);
if (-1 == z)
bail("connect()");
z = read(s, &dtbuf, sizeof(dtbuf) - 1);
if (-1 == z)
bail("read()");
dtbuf[z] = 0;
printf("Date & Time is:%s ", dtbuf);
close(s);
putchar(' ');
return 0;
}
#include < unistd.h >
#include < stdlib.h >
#include < errno.h >
#include < string .h >
#include < sys / types.h >
#include < sys / socket.h >
#include < netinet / in .h >
#include < arpa / inet.h >
#include < netdb.h >
static void bail( const char * on_what)
{
if (errno != 0)
{
fputs(strerror(errno), stderr);
fputs(":",stderr);
}
fputs(on_what, stderr);
fputc(' ', stderr);
exit(1);
}
int main( int argc, char * argv[])
{
int z;
char *srvr_addr = NULL;
char *srvr_port = "9099";
struct sockaddr_in adr_srvr;
int len_inet;
int s;
time_t td;
char dtbuf[128];
if (argc >= 2)
{
srvr_addr = argv[1];
}else
{
srvr_addr = "127.0.0.1";
}
if (argc >= 3)
srvr_port = argv[2];
s = socket(PF_INET, SOCK_STREAM, 0);
if (-1 == s)
bail("socket()");
memset(&adr_srvr, 0, sizeof(adr_srvr));
adr_srvr.sin_family = AF_INET;
adr_srvr.sin_port = htons(atoi(srvr_port));
adr_srvr.sin_addr.s_addr = inet_addr(srvr_addr);
if (adr_srvr.sin_addr.s_addr == INADDR_NONE)
bail("bad address");
len_inet = sizeof(adr_srvr);
z = connect(s, (struct sockaddr *)&adr_srvr, (socklen_t)len_inet);
if (-1 == z)
bail("connect()");
z = read(s, &dtbuf, sizeof(dtbuf) - 1);
if (-1 == z)
bail("read()");
dtbuf[z] = 0;
printf("Date & Time is:%s ", dtbuf);
close(s);
putchar(' ');
return 0;
}