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

请Winsoket高手进来帮Me看看socket通信问题

楼主yhcustc(互学)2005-01-29 20:04:48 在 Linux/Unix社区 / 程序开发区 提问

#include   <fcntl.h>  
  #include   <stdio.h>  
  #include   <stdlib.h>  
  #include   <string.h>  
  #include   <dirent.h>  
  #include   <unistd.h>  
  #include   <sys/stat.h>  
  #include   <sys/types.h>  
  #include   <sys/times.h>  
  #include   <sys/socket.h>  
  #include   <netinet/in.h>  
  #include   <arpa/inet.h>  
   
  #define   STDIN   0  
  #define   STDOUT   1  
  #define   STDERR   2  
  #define   PORT   1119  
  #define   BUFFER_SIZE   1024  
   
  int   main()  
  {  
        int   socket_des;  
        int   address_len;  
        int   real_len;  
        int   real_send_len;  
        int   real_receive_len;  
        char   sendstr[]="Welcome   to   me!\n";  
        char   server_input[BUFFER_SIZE];  
        char   client_message[BUFFER_SIZE];  
        struct   timeval   tv;  
        struct   sockaddr_in   address;  
        fd_set   readfds;  
   
        tv.tv_sec =20;  
        tv.tv_usec =500000;//请问这是什么意识  
         
   
        socket_des =socket(AF_INET,SOCK_STREAM,0);  
   
        address.sin_family =AF_INET;  
        address.sin_addr.s_addr =htonl(INADDR_ANY);  
        address.sin_port =htons(PORT);  
        bzero(address.sin_zero,8);//请问这是什么意识  
        address_len =sizeof(address);//请问这是什么意识  
   
         
        bind(socket_des,   (struct   sockaddr   *)&address,address_len);  
   
        listen(socket,5);  
   
        system("clear");  
        while(1)  
        {  
              int   len;  
              pid_t   pid;  
              int   client_sock_des;  
              struct   sockaddr_in   client_address;  
              len =sizeof(client_address);  
               
               
              client_sock_des =accept(socket_des,(struct   sockaddr   *)&client_address,   &len);  
              if((pid=fork())==0)//请问这是什么意识  
              {  
    close(socket_des);  
    printf("111     Get   connection   from   client   %s\n",inet_ntoa(client_address.sin_addr));为什么这行老是执行啊  
    //   char   sendstr[]="Welcome   connect   to   me\n";  
    real_send_len =send(client_sock_des,sendstr,strlen(sendstr),0);  
    while(1)  
    {  
          FD_ZERO(&readfds);  
          FD_SET(STDIN,&readfds);  
          select(client_sock_des+1,&readfds,NULL,NULL,&tv);  
          if(FD_ISSET(STDIN,&readfds))  
          {//   Send   to   Server  
  real_len   =   read(STDIN,server_input,sizeof(server_input));  
  server_input[real_len]='\0';  
  real_send_len   =   send(client_sock_des,server_input,real_len,0);  
  //   need   some   process   here  
                  printf("Send   to   Client::%s",server_input);  
          }  
          else   if(FD_ISSET(client_sock_des,&readfds))  
          {//   receive   and   send   to   output  
                                real_receive_len   =   recv(client_sock_des,client_message,BUFFER_SIZE,0);  
                if(real_receive_len==0)  
                {  
        exit(0);  
                }  
                else  
                {  
        client_message[real_receive_len]='\0';  
        printf("   Frome   client   ::%s",client_message);        
                }  
          }  
          else  
          {  
  close(client_sock_des);  
  printf("time   out\n");  
  exit(1);  
          }    
    }//in     Wend  
                    close(client_sock_des);  
                    exit(0);  
            }//   End   if  
            close(client_sock_des);  
      }//   Wend  
      exit(0);  
      return   0;  
  }  
   
   
  请问我怎么用VB/VC/C++在Windows2k下进行通信 问题点数:50、回复次数:6Top

1 楼yhcustc(互学)回复于 2005-01-29 20:09:38 得分 0

我上边代码有问题,不果也是抄别人,我想在Linux下写个Server和windows下进行socket通信。  
  不好意识块过年还麻烦大家,先谢了!Top

2 楼yoke_wolf(漠中草)回复于 2005-01-29 20:41:00 得分 0

建议先看书。。。  
  看不懂或实在搞不定再问Top

3 楼pirkka(夜深)回复于 2005-01-29 20:42:29 得分 0

bzero(address.sin_zero,8);//请问这是什么意识---将struct   sockaddr_in中的sin_addr[8]清零,保持和sockaddr长度相同  
   
  address_len=sizeof(address);//请问这是什么意识  
  得到结构的大小,在下一行  
  bind(socket_des,   (struct   sockaddr   *)&address,address_len);  
  就用到了。  
   
  if((pid=fork())==0)//请问这是什么意识  
  创建新的进程来处理当前请求的连接,之前的那个进程还负责监听。==0表示在子进程中了。  
   
  printf("111     Get   connection   from   client   %s\n",inet_ntoa(client_address.sin_addr));为什么这行老是执行啊---while(1)不停的循环,只要有客户端连接上来,就会执行这句话。。。。Top

4 楼yhcustc(互学)回复于 2005-01-30 13:26:16 得分 0

问题时,我还没有客户端连接他   就执行了  
  if((pid=fork())==0)//请问这是什么意识  
  创建新的进程来处理当前请求的连接,之前的那个进程还负责监听。==0表示在子进程中了。  
   
  printf("111     Get   connection   from   client   %s\n",inet_ntoa(client_address.sin_addr));Top

5 楼yjf7888(seeking a place 找工作了location:Chengdu)回复于 2005-01-31 21:34:36 得分 0

tv.tv_sec =20;  
  tv.tv_usec=500000;  
  ------------------------------  
  select()的超时长度,tv_sec的单位是秒,tv_usec是微秒Top

6 楼gaoxianfeng(高)回复于 2005-02-01 11:55:50 得分 50

int   main()  
  {  
        int   socket_des;  
        int   address_len;  
        int   real_len;  
        int   real_send_len;  
        int   real_receive_len;  
        char   sendstr[]="Welcome   to   me!\n";  
        char   server_input[BUFFER_SIZE];  
        char   client_message[BUFFER_SIZE];  
        struct   timeval   tv;  
        struct   sockaddr_in   address;  
        fd_set   readfds;  
   
        tv.tv_sec =20;  
        tv.tv_usec =500000;//请问这是什么意识       500000微秒   即0.5秒  
         
   
        socket_des =socket(AF_INET,SOCK_STREAM,0);  
   
        address.sin_family =AF_INET;  
        address.sin_addr.s_addr =htonl(INADDR_ANY);  
        address.sin_port =htons(PORT);  
        bzero(address.sin_zero,8);//请问这是什么意识                 清零   从address.sin_zero开始8字节  
        address_len =sizeof(address);//请问这是什么意识     取address结构大小  
   
         
        bind(socket_des,   (struct   sockaddr   *)&address,address_len);  
   
        listen(socket,5);  
   
        system("clear");  
        while(1)  
        {  
              int   len;  
              pid_t   pid;  
              int   client_sock_des;  
              struct   sockaddr_in   client_address;  
              len =sizeof(client_address);  
               
               
              client_sock_des =accept(socket_des,(struct   sockaddr   *)&client_address,   &len);  
              if((pid=fork())==0)//请问这是什么意识                 fork   创建进程   ==0   子进程  
              {  
    close(socket_des);  
    printf("111     Get   connection   from   client   %s\n",inet_ntoa(client_address.sin_addr));为什么这行老是执行啊               主进程一直未退出   while(1)  
    //   char   sendstr[]="Welcome   connect   to   me\n";  
    real_send_len =send(client_sock_des,sendstr,strlen(sendstr),0);  
    while(1)  
    {  
          FD_ZERO(&readfds);  
          FD_SET(STDIN,&readfds);  
          select(client_sock_des+1,&readfds,NULL,NULL,&tv);  
          if(FD_ISSET(STDIN,&readfds))  
          {//   Send   to   Server  
  real_len   =   read(STDIN,server_input,sizeof(server_input));  
  server_input[real_len]='\0';  
  real_send_len   =   send(client_sock_des,server_input,real_len,0);  
  //   need   some   process   here  
                  printf("Send   to   Client::%s",server_input);  
          }  
          else   if(FD_ISSET(client_sock_des,&readfds))  
          {//   receive   and   send   to   output  
                                real_receive_len   =   recv(client_sock_des,client_message,BUFFER_SIZE,0);  
                if(real_receive_len==0)  
                {  
        exit(0);  
                }  
                else  
                {  
        client_message[real_receive_len]='\0';  
        printf("   Frome   client   ::%s",client_message);        
                }  
          }  
          else  
          {  
  close(client_sock_des);  
  printf("time   out\n");  
  exit(1);  
          }    
    }//in     Wend  
                    close(client_sock_des);  
                    exit(0);  
            }//   End   if  
            close(client_sock_des);  
      }//   Wend  
      exit(0);  
      return   0;  
  }  
   
  还要多学习Top

相关问题

  • SOCKET 通信
  • 求教关于socket通信
  • socket通信的问题
  • 关于socket通信问题
  • !!!求助。socket通信之eofexception!!!
  • donet的Socket通信问题
  • 高分求教-----Socket通信
  • 多线程 用socket通信
  • 求救 socket通信问题
  • 异步socket通信问题

关键词

  • tv
  • client
  • socket
  • real
  • 执行
  • 连接
  • sec
  • me
  • address
  • sin

得分解答快速导航

  • 帖主:yhcustc
  • gaoxianfeng

相关链接

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

广告也精彩

反馈

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