免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1413 | 回复: 0

自己的原始套接字程序出问题 请高手帮忙看看 [复制链接]

论坛徽章:
0
发表于 2009-05-07 19:08 |显示全部楼层
在两台虚拟机上用原始套接字进行通讯,两台虚拟机可以ping通 server地址为192.168.0.2     client地址为192.168.0.3  server与client程序如下
/*server.c*/
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
                                                                                
main(){
        int sockrecv;
        char message[10];
        struct sockaddr_in recvaddr,sendaddr;
        bzero(&recvaddr,sizeof(recvaddr));
                                                                                
        recvaddr.sin_family = AF_INET;
        recvaddr.sin_addr.s_addr = inet_addr("192.168.0.2");
                                                                                
        sendaddr.sin_family = AF_INET;
        sendaddr.sin_addr.s_addr = inet_addr("192.168.0.3");
                                                                                
/*create raw socket*/
if((sockrecv=socket(AF_INET,SOCK_RAW,IPPROTO_TCP))== -1){
                perror("socket");
                exit(1);
        }
        printf("socket success! sockrecv = %d\n",sockrecv);
        printf("waiting for data from sender...\n");
/*bind the socket*/
        if(bind(sockrecv,(struct sockaddr *)&recvaddr,sizeof(struct sockaddr))== -1){
        perror("bind");
        exit(1);
        }
                                                                                
/*loop forever*/
        while(1){
                recvfrom(sockrecv,message,sizeof(message),0,(struct sockaddr *)&sendaddr,sizeof(struct sockaddr));
                printf("receive a message : %s\n",message);
        if(strncmp(message,"stop",4) == 0){
             printf("sender stopped\n");

               break;
                }
        }
                                                                                
        close(sockrecv);
                                                                                
}


break;
                }
        }
                                                                                
        close(sockrecv);
                                                                                
}

/*client.c*/
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/socket.h>

main(int argc,char *argv[]){
       int socksend,count;
       char buf[10];
       struct sockaddr_in sendaddr,recvaddr;
       bzero(&sendaddr,sizeof(sendaddr));

       sendaddr.sin_family=AF_INET;
       sendaddr.sin_addr.s_addr=inet_addr("192.168.0.3");

       recvaddr.sin_family=AF_INET;
       recvaddr.sin_addr.s_addr=inet_addr("192.168.0.2");

       if(argc < 2){
            printf("please enter the server's IP!\n");
            exit(1);
       }
/*create raw socket to send message*/
       if((socksend=socket(AF_INET,SOCK_RAW,IPPROTO_TCP))== -1){
        perror("socket");
        exit(1);
        }
/*bind the socket*/
       if(bind(socksend,(struct sockaddr *)&recvaddr,sizeof(struct addr))== -1){
       perror("bind");
       exit(1);
       }
/*connect to the server socket*/
       if(connect(socksend,(struct sockaddr *)&recvaddr,sizeof(struct sockaddr))== -1){
        perror("connect");
        exit(1);
        }
/*send the message*/
       for(count=1;count , 5;count++){
               sprintf(buf,"data ID%d\n",count);
               send(socksend,buf,sizeof(buf),0);
               printf("send count = %d\n",count);
         }
          sprintf(buf,"stop\n");
          send(socksend,buf,sizeof(buf),0);

          close(socksend);

}
server机下
[root@localhost root]# ./server
socket success! sockrecv = 3
waiting for data from sender...

client机下
[root@localhost root]# ./client 192.168.0.2
send count = 1
send count = 2
send count = 3
send count = 4
[root@localhost root]#
server收不到client的数据包,请帮忙看看程序有什么问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP