CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  专题开发/技术/项目 >  网络通信

SOS!!!!UNIX下的Socket Client/Server编程

楼主purplelover(狂飙)2001-11-08 20:02:50 在 专题开发/技术/项目 / 网络通信 提问

只做过windows下的,请各位大虾帮帮我,最好给个简单例子 问题点数:58、回复次数:8Top

1 楼lurenfu(具有中国特色的社会主义初级阶段,一百年不变)回复于 2001-11-08 20:06:58 得分 0

我只做过linux下的,从没做过windows下的,linux下的socket我是半个专家咯,不信你看专家榜,当然只限这个月的,因为我这个月才开始咯Top

2 楼lurenfu(具有中国特色的社会主义初级阶段,一百年不变)回复于 2001-11-08 20:11:13 得分 0

有么事不明白之处尽管问,我不知道也可以帮你查资料。Top

3 楼lurenfu(具有中国特色的社会主义初级阶段,一百年不变)回复于 2001-11-08 20:35:36 得分 0

简单示例如下,这是最基本的形式,没有考虑通信方式(阻塞/非阻塞/信号/复用/异步),也没有考虑服务器的工作方式:单客户服务、多客户服务、多进程、多线程、select复用等  
   
  server.c  
   
  #include   <stdio.h>  
  #include   <assert.h>  
  #include   <unistd.h>  
  #include   <stdlib.h>  
  #include   <string.h>  
  #include   <arpa/inet.h>  
  #include   <sys/types.h>  
  #include   <sys/socket.h>  
   
  #define     LISTEN_PORT         8888  
   
  int   main(   int   argc,   char   **argv   )  
  {  
          int   sock,   result;  
          socklen_t   len;  
          struct   sockaddr_in   addr;  
   
          sock   =   socket(   PF_INET,   SOCK_STREAM,   IPPROTO_IP   );  
          assert(   sock   !=   -1   );  
          bzero(   &addr,   sizeof(addr)   );  
          addr.sin_family   =   AF_INET;  
          addr.sin_port   =   htons(   LISTEN_PORT   );  
          addr.sin_addr.s_addr   =   htonl(   INADDR_ANY   );  
          len   =   (socklen_t)sizeof(addr);  
          r   =   bind(   sock,   (struct   sockaddr   *)&addr,   len   );  
          assert(   r   !=   -1   );  
          r   =   listen(   sock,   5   );  
          assert(   r   !=   -1   );  
          while   (   1   )  
          {  
                  int   newsock;  
                  struct   sockaddr_in   cliaddr;  
   
                  newsock   =   accept(   sock,   (struct   sockaddr   *)&addr,   (socklen_t)sizeof(addr)   );  
                  assert(   newsock   !=   -1   );  
                  if   (   fork()   ==   0   )  
                  {  
                          close(   sock   );  
                          send(   newsock,   GREETING,   strlen(GREETING)   );  
                          close(   newsock   );  
                          exit(   0   );  
                  }  
   
                  close(   newsock   );  
          }  
          return   0;  
  }Top

4 楼purplelover(狂飙)回复于 2001-11-08 20:46:53 得分 0

首先谢谢楼上的大哥  
  要求如下:(client和server程序)  
              1)   Client与Server建立连接;  
              2)   Server向Client发送"Hello"消息;  
              3)   Client显示来自Server的"Hello"消息;  
              4)   Client断开与Server的连接;  
              5)   Client与Server应用程序自动退出。  
     
  Top

5 楼lurenfu(具有中国特色的社会主义初级阶段,一百年不变)回复于 2001-11-08 20:51:57 得分 58

上面加一行:#define                 GREETING               "Hello,   pretty!   I   miss   you!"  
  下面是client.c  
  #include   <stdio.h>  
  #include   <netdb.h>  
  #include   <assert.h>  
  #include   <unistd.h>  
  #include   <stdlib.h>  
  #include   <string.h>  
  #include   <arpa/inet.h>  
  #include   <sys/types.h>  
  #include   <sys/socket.h>  
   
  #define     SERVER_PORT         8888  
  #define     SERVER_ADDR         "127.0.0.1"  
   
  int   main(   int   argc,   char   **argv   )  
  {  
          int   sock,   result;  
          socklen_t   len;  
          char       buf[256];  
          struct   sockaddr_in   addr;  
   
          sock   =   socket(   PF_INET,   SOCK_STREAM,   IPPROTO_IP   );  
          assert(   sock   !=   -1   );  
          bzero(   &addr,   sizeof(addr)   );  
          addr.sin_family   =   AF_INET;  
          addr.sin_port   =   htons(   SERVER_PORT   );  
          if   (   inet_aton(   SERVER_ADDR,   &addr.sin_addr   )   ==   0   )  
          {  
                    struct   hostent   *h   =   NULL;  
   
                    h   =   gethostbyname(   SERVER_ADDR   );  
                    assert(   h   !=   NULL   );  
                    memcpy(   &addr.sin_addr.s_addr,   h->h_addr,   h->h_length   );  
          }  
          len   =   (socklen_t)sizeof(addr);  
          r   =   connect(   sock,   (struct   sockaddr   *)&addr,   len   );  
          assert(   r   !=   -1   );  
          memset(   buf,   0,   sizeof(buf)   );  
          recv(   sock,   buf,   sizeof(buf),   0   );  
          close(   sock   );  
          printf(   "%s\n",   buf   );  
          return   0;Top

6 楼lurenfu(具有中国特色的社会主义初级阶段,一百年不变)回复于 2001-11-08 20:53:30 得分 0

突然发现少了一个}Top

7 楼purplelover(狂飙)回复于 2001-11-08 20:55:58 得分 0

好哥们,给分。以后还要多多指教才是。Top

8 楼lurenfu(具有中国特色的社会主义初级阶段,一百年不变)回复于 2001-11-08 21:23:46 得分 0

没问题!只要我知道的,一定知无不言,言无不尽。  
  大家共同进步,共同学习。以上代码可是我一个字母一个字母敲上去的呀Top

相关问题

  • 关于UNIX下SOCKET编程的问题
  • Socket编程:
  • socket编程
  • socket编程!!!
  • socket编程!!!
  • SOCKET编程
  • SOCKET编程
  • unix编程问题
  • UNIX下的编程???
  • unix编程问题!

关键词

  • client
  • server
  • addr
  • newsock
  • sock
  • socklen
  • sin
  • assert
  • struct sockaddr
  • inet

得分解答快速导航

  • 帖主:purplelover
  • lurenfu

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo