|
#
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;
}
|