#
include
<
stdio.
h>
#
include
<
string
.
h>
#
include
<
sys/
socket
.
h>
#
include
<
netinet/
in.
h>
#
define
MAXDATASIZE 1024
#
define
SERVERPORT 8000 #
define
MAXCONN_NUM 10
int
main(
)
{
char
buf[
MAXDATASIZE]
;
int
sockfd,
new_fd,
numbytes;
struct
sockaddr_in
server_addr;
struct
sockaddr_in
client_addr;
int
sin_size;
if
(
(
sockfd =
socket
(
AF_INET
,
SOCK_STREAM
,
0)
)
=
=
-
1)
{
perror
(
"socket error"
)
;
return
1;
}
memset
(
&
client_addr,
0,
sizeof
(
struct
sockaddr
)
)
;
server_addr.
sin_family =
AF_INET
;
server_addr.
sin_port =
htons
(
SERVERPORT)
;
server_addr.
sin_addr.
s_addr =
INADDR_ANY
;
if
(
bind
(
sockfd,
(
struct
sockaddr
*
)
&
server_addr,
sizeof
(
struct
sockaddr
)
)
=
=
-
1)
{
perror
(
"bind error"
)
;
return
1;
}
if
(
listen
(
sockfd,
MAXCONN_NUM)
=
=
-
1)
{
perror
(
"listen error"
)
;
return
1;
}
while
(
1)
{
sin_size =
sizeof
(
struct
sockaddr_in
)
;
if
(
(
new_fd =
accept
(
sockfd,
(
struct
sockaddr
*
)
&
client_addr,
&
sin_size)
)
=
=
-
1)
{
perror
(
"accept error"
)
;
continue
;
}
printf
(
"server: got connection from %s/n"
,
inet_ntoa(
client_addr.
sin_addr)
)
;
if
(
(
numbytes =
recv
(
new_fd,
buf,
MAXDATASIZE,
0)
)
=
=
-
1)
{
perror
(
"recv error"
)
;
return
1;
}
if
(
numbytes)
{
buf[
numbytes]
=
'/0'
;
printf
(
"received: %s/n"
,
buf)
;
sleep
(
3)
;
}
printf
(
"send: hi~~/n"
)
;
if
(
send
(
new_fd,
"hi~~"
,
5,
0)
=
=
-
1)
{
perror
(
"send error"
)
;
return
1;
}
close
(
new_fd)
;
}
return
0;
}
|