QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2199|回复: 0

使用SOCK_RAW进行通讯的问题

[复制链接]
发表于 2009-5-8 18:20:44 | 显示全部楼层 |阅读模式
在两台虚拟机上用原始套接字进行通讯,两台虚拟机可以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的数据包,请帮忙看看程序有什么问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-4-19 19:03 , Processed in 0.072865 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表