CSDN博客

img btlfe

前几天看到一个简单的基于socket的程序,特放上来!

发表于2004/6/28 16:54:00  624人阅读

不过功能比较简单,后面在些基本上继续完善吧!

Server.c

/* 服务器程序 */

#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include

int main(int argc,char *argv[])
{
 int sockfd,new_fd;
 struct sockaddr_in server_addr;
 struct sockaddr_in client_addr;
 
 int sin_size,portnumber;
 char hello[]="Hello,Welcome to visited btlfe's Server.../n";
 
 if(argc!=2)
 {
  fprintf(stderr,"Usage:%s portnumber/a/n",argv[0]);
  exit(1);
 }
 
 if((portnumber=atoi(argv[1]))<0)
 {
  fprintf(stderr,"Usage:%s portnumber/a/n",argv[0]);
  exit(1);
 }
 
/* 服务器端开始建立socket描述符*/
 
 if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
 {
  fprintf(stderr,"Socket error:%s /n/a",strerror(errno));
  exit(1);
 }
 
 puts("This is a simple program to test socket connect!");
 sleep(1);
 puts("Written by btlfe of 6.21,2004");
 sleep(2);
 puts("Now server starting... please wait...");
 
/* 服务器端填充sockaddr结构*/

 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(portnumber);
 
/*捆绑sockfd描述符*/

 if(bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)
 {
  fprintf(stderr,"Bind error:%s/n/a",strerror(errno));
  exit(1);
 }
 
/*监听sockfd描述符*/
 
 if(listen(sockfd,5)==-1)
 {
  fprintf(stderr,"Listen error:%s/n/a",strerror(errno));
  exit(1);
 }
 
/*服务器阻塞,直到客户程序建立连接*/

 while(1)
 {
  sin_size=sizeof(struct sockaddr_in);
  if((new_fd=accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size))==-1)
  {
   fprintf(stderr,"Accept error:%s/n/a",strerror(errno));
   exit(1);
  }
  
  fprintf(stderr,"Server get connetion from %s/n",inet_ntoa(client_addr.sin_addr));
  
  if(write(new_fd,hello,strlen(hello))==-1)
  {
   fprintf(stderr,"Write Error:%s/n",strerror(errno));
   exit(1);
  }
  
  close(new_fd);
 }
 
 close(sockfd);
 exit(0);
}

 

client.c

/* 客房端程序*/

#include
#include
#include
#include
#include  
#include
#include
#include
#include


int main(int argc,char *argv[])
{
 int sockfd;
 char buffer[1024];
 struct sockaddr_in server_addr;
 struct hostent *host;
 int portnumber,nbytes;
 
 buffer[2]='/0';
 
 if(argc!=3)
 {
  fprintf(stderr,"Usage:%s hostname portnumber /a/n",argv[0]);
  exit(1);
 }
 
 if((host=gethostbyname(argv[1]))==NULL)
 {
  fprintf(stderr,"Gethostname error/n");
  exit(1);
 }
 
 if((portnumber=atoi(argv[2]))<0)
 {
  fprintf(stderr,"Usage:%s hostname portnumber /a/n",argv[0]);
  exit(1);
 }
 
/*客房端程序开始建立socket描述符*/

 puts("This is a simple program to test socket connect!");
 sleep(1);
 puts("Written by btlfe,6.21,2004");
 sleep(2);
 puts("Now connect to the server...");
 
 if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
 {
  fprintf(stderr,"Socket Error:%s/a/n",strerror(errno));
  exit(1);
 }

/*客户端程序填充服务器端资料*/
 
 bzero(&server_addr,sizeof(server_addr));
 server_addr.sin_family=AF_INET;
 server_addr.sin_port=htons(portnumber);
 server_addr.sin_addr=*((struct in_addr *)host->h_addr);
 
/*客户端程序发起连接请求! */

 if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)
 {
  fprintf(stderr,"Connetc Error:%s/a/n",strerror(errno));
  exit(1);
 }
 
/*连接成功了*/
 
 if((nbytes=read(sockfd,buffer,1024))==-1)
 {
  fprintf(stderr,"Read Error:%s/n",buffer);
  exit(1);
 }
 
 buffer[nbytes]='/n';
 printf("I have received:%s/n",buffer);
 printf("%s",buffer);
 puts("End");
 close(sockfd);
 exit(1);
}

0 0

相关博文

我的热门文章

img
取 消
img