- 论坛徽章:
- 0
|
#include <ourhdr.h>;
#include <sys/socket.h>; /*elementry socket fuctions*/
#include <netinet/in.h>;
#include <arpa/inet.h>; /*contain fuc:inet_ntop,inet_pton*/
#include <myfuc.h>; /*self-defined fuctions*/
void
cli_handle(FILE *fp,int s);
main(int argc,char **argv)
{
int sockfd;
struct sockaddr_in servaddr;
if(argc!=2)
err_sys("useage:a.out <remote machine'ip>;" ;
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(9877);
if(inet_pton(AF_INET,argv[1],&(servaddr.sin_addr))<=0)
err_sys("inet_pton error" ;
sockfd=Socket(AF_INET,SOCK_STREAM,0);
Connect(sockfd,(SA *)&servaddr,sizeof(servaddr));
cli_handle(stdin,sockfd);
exit(0);
}
void
cli_handle(FILE *fp,int s)
{
char sendline[MAXLINE],recvline[MAXLINE];
while(fgets(sendline,MAXLINE,fp)!=NULL){
writen(s,sendline,strlen(sendline));
if(readline(s,recvline,MAXLINE)==0){
printf("server terminated prematurely" ;
exit(0);
}
fputs(recvline,stdout);
}
}
above::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::client source..
#include <ourhdr.h>;
#include <sys/socket.h>;
#include <netinet/in.h>;
#include <arpa/inet.h>;
#include <myfuc.h>;
void serv_handle(int sockfd);
main()
{
int listenfd,connfd;
struct sockaddr_in servaddr,addr;
socklen_t len;
listenfd=Socket(AF_INET,SOCK_STREAM,0); /*tcp server,so this*/
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(9877);
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
Bind(listenfd,(SA *)&servaddr,sizeof(servaddr));
Listen(listenfd,64);
for(; ; ){
len=sizeof(addr);
connfd=Accept(listenfd,(SA *)&addr,&len);
if(fork()==0){ /*child*/
close(listenfd);
serv_handle(connfd);
close(connfd);
}
close(connfd);
}
}
void
serv_handle(int sockfd)
{
ssize_t n;
char line[MAXLINE];
for(; ; ){
if((n=readline(sockfd,line,MAXLINE))==0)
return;
writen(sockfd,line,n);
}
}
above::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;server source
#include <ourhdr.h>;
#include <sys/socket.h>;
void
err_sys(char *ptr)
{
printf("%s",ptr);
exit(0);
}
ssize_t
readline(int fd,void *vptr,size_t maxlen)
{
ssize_t rc,n;
char c,*ptr;
ptr=vptr;
for(n=1;n<maxlen;n++){
if((rc=read(fd,&c,1))==1){
*ptr=c;
if(c=='\n')
break;
}
else if(rc==0){
if(n==1)
return(0);
else
break;
}
else{
if(errno!=EINTR)
return(-1);
else
n--;
}
*ptr=0;
return(n);
}
}
ssize_t
readn(int fd,void *vptr,size_t n)
{
ssize_t nread;
size_t nleft;
char *ptr;
ptr=vptr;
nleft=n;
while(nleft!=0){
if((nread=read(fd,ptr,nleft))<0)
{if(errno==EINTR) /*may signal interrupt,so restart*/
nread=0; /*nothing readen*/
else /*error*/
return(-1);
}
else if(nread==0) /*EOF*/
break;
nleft=nleft-nread;
ptr=ptr+nread;
}
return(n-nleft);
}
ssize_t
writen(int fd,void *vptr,size_t n)
{
ssize_t nwrite;
size_t nleft;
char *ptr;
nleft=n;
while(nleft!=0){
if((nwrite==write(fd,ptr,nleft))<0)
{if(errno==EINTR)
nwrite=0;
else
return(-1);
}
nleft=nleft-nwrite;
ptr+=nwrite;
}
return(n);
}
int
Socket(int domain,int type,int family)
{
int sock;
if((sock=socket(domain,type,family))<0)
err_sys("socket error" ;
return(sock);
}
void
Listen(int s,int backlog)
{
char *ptr;
if((ptr=getenv("LISTENQ" )==NULL)
printf("No match to LISTENQ\n" ;
else
backlog=atoi(ptr);
if(listen(s,backlog)<0)
err_sys("listen error" ;
}
void
Bind(int s,struct sockaddr *my_addr,socklen_t addrlen)
{
if(bind(s,my_addr,addrlen)<0)
err_sys("bind error" ;
}
void
Connect(int s,const struct sockaddr *serv_addr,socklen_t addrlen)
{
if(connect(s,serv_addr,addrlen)<0)
err_sys("connect error" ;
}
int
Accept(int s,struct sockaddr *addr,socklen_t *addrlen)
{
int sock;
if((sock=accept(s,addr,addrlen))<0)
err_sys("accept error" ;
return(sock);
}
above::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;myfuc.h
assemble server source and client source.
first run server ,netstat -a ,then we see
tcp 0 0 *:9877 *:* LISTEN
but later run client for example:a.out 127.0.0.1
then netstat -a
we should see
tcp 0 0127.0.0.1.9877 127.0.0.1.2333 Established
tcp 0 0127.0.0.1.2333 127.0.0.1.9877 Established
but only we see
tcp 0 0 *:9877 *:* LISTEN
why??????
help me,thanks
i am fresh to linux,if i can't pass this,so bad!!!! |
|