gust_c 2015-09-08 02:32 采纳率: 0%
浏览 1678

C语言udp协议,局域网下,这两段代码为什么不能通讯?

client.c 发送消息

#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<errno.h>
#include<unistd.h>
#include<sys/wait.h>
#include<signal.h>
#include<stdio.h>
#include<string.h>
int main (void)
{
    int sock ;
    if((sock=socket(PF_INET,SOCK_DGRAM,0)) <0)
    {
        perror("socket");
        return 1 ;
    }
    struct sockaddr_in  servaddr;
    bzero(&servaddr,sizeof(servaddr));
    servaddr.sin_family =  AF_INET;
    servaddr.sin_port = htons(12345);
    servaddr.sin_addr.s_addr = inet_addr("192.168.0.104");

    char  str[4]="123";
    int i = 1;
    while (i++!= 100000000)
    {
        sendto(sock,str, sizeof(str), 0,(struct sockaddr *)&servaddr, sizeof(servaddr));
    }
    close(sock);

    return 0;
}


server.c收消息

 #include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<errno.h>
#include<unistd.h>
#include<sys/wait.h>
#include<signal.h>
#include<stdio.h>
#include<fcntl.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#define MAXBUF 1024
int main (void)
{
    int listener,kdpfd,nfds,n;
    socklen_t len;
    len = sizeof(struct sockaddr_in);
    struct sockaddr_in my_addr,peer_addr;
    clock_t start,finish;
    double time;
    if((listener=socket(PF_INET,SOCK_DGRAM,0))==-1)
    {
        perror(" socket ");
        exit(1);
    }
    int  opt=SO_REUSEADDR;
    if(setsockopt(listener,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt))==-1)
    {
        perror("setsockopt");
        exit(1);
    }
    bzero(&my_addr,sizeof(my_addr));
    my_addr.sin_family = AF_INET;
    my_addr.sin_port = htons(12345);
    my_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    if((bind(listener,(struct sockaddr *)&my_addr,sizeof (struct sockaddr))==-1))
    {
        perror("bind");
        exit(1);
    }
    int cnt;
    int i;
    for(i= 0 ;i<10;i++)
    {
        cnt = 0;
        start = clock();
        while(1)
        {
            recvfrom(listener,0,0,0,(struct sockaddr *)&peer_addr,&len);
            ++cnt;
            if(cnt == 100000)
                break;
        }
        finish = clock();
        time +=  (double)(finish - start)/CLOCKS_PER_SEC;
    }
    printf("%lf \n",time/10);
    close(listener);
    close(kdpfd);
    return 0;
}
  • 写回答

4条回答 默认 最新

  • 世纪殇 2015-09-08 03:13
    关注

    每一步操作都检测一下返回值,看看是否有哪个api执行失败了,确定问题之后进行解决

    评论

报告相同问题?

悬赏问题

  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制