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执行失败了,确定问题之后进行解决

    评论

报告相同问题?

悬赏问题

  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题
  • ¥15 Python时间序列如何拟合疏系数模型