Linux Socket编程实例(一个Hello World程序)


/**/
/*
*








*/




<
stdio.h
>


<
sys
/
socket.h
>


<
unistd.h
>


<
sys
/
types.h
>


<
netinet
/
in
.h
>


<
stdlib.h
>


<
time.h
>




#define
?SERVER_PORT?20000?
//
?define?the?defualt?connect?port?id


#define
?LENGTH_OF_LISTEN_QUEUE?10?
//
length?of?listen?queue?in?server


#define
?BUFFER_SIZE?255


#define
?WELCOME_MESSAGE?"welcome?to?connect?the?server.?"






int
?main(
int
?argc,?
char
?
**
argv)




{


int
?servfd,clifd;


struct
?sockaddr_in?servaddr,cliaddr;




if
?((servfd?
=
?socket(AF_INET,SOCK_STREAM,
0
))?
<
?
0
)




{


"
create?socket?error!\n
"
);


1
);




&
servaddr,
sizeof
(servaddr));


=
?AF_INET;


=
?htons(SERVER_PORT);


=
?htons(INADDR_ANY);




if
?(bind(servfd,(
struct
?sockaddr
*
)
&
servaddr,
sizeof
(servaddr))
<
0
)




{


"
bind?to?port?%d?failure!\n
"
,SERVER_PORT);


1
);






if
?(listen(servfd,LENGTH_OF_LISTEN_QUEUE)?
<
?
0
)




{


"
call?listen?failure!\n
"
);


1
);






while
?(
1
)




{
//
server?loop?will?nerver?exit?unless?any?body?kill?the?process


char
?buf[BUFFER_SIZE];


long
?timestamp;


=
?
sizeof
(cliaddr);


=
?accept(servfd,(
struct
?sockaddr
*
)
&
cliaddr,
&
length);


if
?(clifd?
<
?
0
)




{


"
error?comes?when?call?accept!\n
"
);


break
;






//
inet_ntop(INET_ADDRSTRLEN,cliaddr.sin_addr,buf,BUFFER_SIZE);




"
from?client,IP:%s,Port:%d\n
"
,inet_ntoa(cliaddr.sin_addr),ntohs(cliaddr.sin_port));


=
?time(NULL);


"
timestamp?in?server:
"
);


&
timestamp));


0
);






//
exit




return
?
0
;












/**/
/*
?Tcp?client?program,?It?is?a?simple?example?only.






*/






<
stdio.h
>


<
sys
/
socket.h
>


<
unistd.h
>


<
sys
/
types.h
>


<
netinet
/
in
.h
>


<
stdlib.h
>




#define
?SERVER_PORT?20000?
//
?define?the?defualt?connect?port?id


#define
?CLIENT_PORT?((20001+rand())%65536)?
//
?define?the?defualt?client?port?as?a?random?port




#define
?BUFFER_SIZE?255


#define
?REUQEST_MESSAGE?"welcome?to?connect?the?server.\n"




void
?usage(
char
?
*
name)




{


"
usage:?%s?IpAddr\n
"
,name);






int
?main(
int
?argc,?
char
?
**
argv)




{?????


int
?servfd,clifd,length?
=
?
0
;


struct
?sockaddr_in?servaddr,cliaddr;


=
?
sizeof
(servaddr);


char
?buf[BUFFER_SIZE];




if
?(argc?
<
?
2
)




{


0
]);


1
);






if
?((clifd?
=
?socket(AF_INET,SOCK_STREAM,
0
))?
<
?
0
)




{


"
create?socket?error!\n
"
);


1
);




//
initialize?random?generator


&
cliaddr,
sizeof
(cliaddr));


=
?AF_INET;


=
?htons(CLIENT_PORT);


=
?htons(INADDR_ANY);




&
servaddr,
sizeof
(servaddr));


=
?AF_INET;


1
],
&
servaddr.sin_addr);


=
?htons(SERVER_PORT);


//
servaddr.sin_addr.s_addr?=?htons(INADDR_ANY);




if
?(bind(clifd,(
struct
?sockaddr
*
)
&
cliaddr,
sizeof
(cliaddr))
<
0
)




{


"
bind?to?port?%d?failure!\n
"
,CLIENT_PORT);


1
);






if
?(connect(clifd,(
struct
?sockaddr
*
)
&
servaddr,?socklen)?
<
?
0
)




{


"
can't?connect?to?%s!\n
"
,argv[
1
]);


1
);






=
?recv(clifd,buf,BUFFER_SIZE,
0
);


if
?(length?
<
?
0
)




{


"
error?comes?when?recieve?data?from?server?%s!
"
,argv[
1
]);


1
);




"
from?server?%s?:\n\t%s?
"
,argv[
1
],buf);






return
?
0
;




--------------------next---------------------
0 条评论:
发表评论
订阅 博文评论 [Atom]
<< 主页