Chinaunix首页 | 论坛 | 博客
  • 博客访问: 117765
  • 博文数量: 30
  • 博客积分: 2520
  • 博客等级: 少校
  • 技术积分: 395
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-10 10:31
文章分类
文章存档

2009年(7)

2008年(23)

我的朋友

分类: C/C++

2008-03-04 16:37:12

 
利用socket实现从服务器向客户端发现信息:
 
服务器端代码:
#include
#include
#include
#include
#include
#include
main()
{
 struct sockaddr_in my_addr,their_addr;
 int sockfd,new_fd;
 int ret;
 char buffer[100];
 sockfd=socket(AF_INET,SOCK_STREAM,0);
 if(sockfd<0)
 { 
  printf("socket error");
  exit(0);
 }
 my_addr.sin_family=AF_INET;
 my_addr.sin_port=htons(9999);
 my_addr.sin_addr.s_addr=htonl(INADDR_ANY);
 bzero(&(my_addr.sin_zero),8);
 ret=bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr));
 if(ret<0)
 {
  printf("bind error");
  exit(0);
 }
 ret=listen(sockfd,10);
 if(ret<0)
 {
  printf("listen error");
  exit(0);
 }
 while(1)
 {
  int sin_size=sizeof(struct sockaddr_in);
  new_fd=accept(sockfd,(struct sockaddr *)&their_addr,&sin_size);
  if(new_fd<0)
  {
   printf("accept error");
   exit(0);
  }
  if(!fork())
  {
   printf("server:got connect from %s\n",inet_ntoa  (their_addr.sin_addr));
   printf("input send data:");
   if(gets(buffer)==NULL)
   {
    printf("input error");
    exit(0);
   }
   if(send(new_fd,buffer,strlen(buffer),0)==-1)
   {
    printf("send error");
    exit(0);
   } 
   close(new_fd);
   close(sockfd);
   exit(0);
  } 
 }
close(new_fd);
close(sockfd);
}
客户端代码:
#include
#include
#include
#include
#include
#include
#include
int main(int argc,char *argv[])
{
 int sockfd,numbytes;
 char buf[100];
 struct hostent *he;
 struct sockaddr_in their_addr;
 if(argc!=2)
 {
  printf("para error");
  exit(0);
 }
 if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
 {
  printf("socket error");
  exit(0);
 }
 if((he=gethostbyname(argv[1]))==NULL)
 {
  printf("gethostname error");
  exit(0);
 }
 their_addr.sin_family=AF_INET;
 their_addr.sin_port=htons(9999);
 their_addr.sin_addr=*((struct in_addr *)he->h_addr);
 bzero(&(their_addr.sin_zero),8);
 if(connect(sockfd,(struct sockaddr *)&their_addr,sizeof(struct sockaddr))==-1)
 {
  printf("connect error");
  exit(0);
 }
 if((numbytes=recv(sockfd,buf,100,0))==-1)
 {
  printf("recv error");
  exit(0);
 }
 buf[numbytes]='\0';
 printf("Received:%s\n",buf);
 close(sockfd);
 return 0;
}
阅读(530) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:linux socket实现简单网络聊天

给主人留下些什么吧!~~