以后,争取每天写一个工作除外的程序,练习练习代码能力。主要是方便自己看,不是学习系列,误伤莫怪。
上代码了
root@bt:~/c/network# cat server.c
#include
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc, char *argv[])
{
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
int port;
int sin_size;
int sockfd, new_sockfd;
char hello[]="hello,world for inetd";
if(argc != 2) {
fprintf(stderr, "[Usage:] %s postan", argv[0]);
exit(1);
}
port = atoi(argv[1]);
printf("port=%dn", port);
if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
fprintf(stderr, "socket error %san", strerror(errno));
exit(1);
}
int n = 1;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &n ,sizeof(n));
bzero(&server_addr, sizeof(struct sockaddr_in));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
server_addr.sin_port = htons(port);
if(bind(sockfd, (struct sockaddr *)(&server_addr), sizeof(struct sockaddr)) == -1){
fprintf(stderr,"bind error %san", strerror(errno));
exit(1);
}
if(listen(sockfd, 5) == -1) {
fprintf(stderr, "listen error %san", strerror(errno));
exit(1);
}
while ( 1 ) {
sin_size = sizeof(struct sockaddr);
if((new_sockfd=accept(sockfd, (struct sockaddr *)(&client_addr), &sin_size)) == -1) {
fprintf(stderr, "accept error %san", strerror(errno));
exit(1);
}
fprintf(stderr, "server get connection from %sn", inet_ntoa(client_addr.sin_addr));
if(write(new_sockfd, hello, strlen(hello)) == -1) {
fprintf(stderr, "write to client error %san", strerror(errno));
close(new_sockfd);
continue;
}
close(new_sockfd);
}
close(sockfd);
return 0;
}
root@bt:~/c/network# cat client.c
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc, char **argv)
{
struct sockaddr_in server_addr;
int sockfd, port, nbytes;
char buffer[1024];
struct hostent *host;
if(argc != 3) {
fprintf(stderr, "Usage:%s hostname port", argv[0]);
exit(1);
}
if((host=gethostbyname(argv[1])) == NULL) {
fprintf(stderr, "gethostbyname error %sna", strerror(errno));
exit(1);
}
if((port=atoi(argv[2])) < 0) {
fprintf(stderr, "port input errorna");
exit(1);
}
if((sockfd=socket(AF_INET, SOCK_STREAM, 0)) == -1 ){
fprintf(stderr, "socket error %sna", strerror(errno));
exit(1);
}
bzero(&server_addr, sizeof(struct sockaddr_in));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr=inet_addr(argv[1]);
server_addr.sin_port = htons(port);
if(connect(sockfd, (struct sockaddr *)(&server_addr), sizeof(struct sockaddr )) == -1) {
fprintf(stderr, "connect error %sna", strerror(errno));
exit(1);
}
if((nbytes=read(sockfd, buffer, 1024)) == -1) {
fprintf(stderr, "read sockfd error %sna", strerror(errno));
exit(1);
}
buffer[nbytes]='0';
printf("buffer=[%s]n", buffer);
close(sockfd);
return 0;
}
root@bt:~/c/network# cat Makefile
all:server client
server:server.c
gcc $^ -o $@
client:client.c
gcc $^ -o $@