qq_21831417 2016-07-27 01:00 采纳率: 30.8%
浏览 4087

linux udp通信不成功,server收不到消息

仅仅是一个 示例,可是先执行server 后执行 client ,server还是没有收到消息。问题出在哪里呢
Server.c
#include "server.h"

#define PORT 2345
#define IP "192.168.0.114"

int main (void)
{
int fd;
struct sockaddr_in servaddr, cliaddr;
char buf[BUFFER_SIZE];
socklen_t peerlen;

//建立socket连接
fd = socket(AF_INET, SOCK_DGRAM, 0);
if(fd == -1)
{
    printf("fd error!\n");
    return -1;
}

//设置sockaddr_in参数
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(PORT);
servaddr.sin_addr.s_addr = inet_addr(IP);

//绑定
bind(fd, (struct sockaddr *)&servaddr, sizeof(servaddr));
if(bind < 0)
{
    printf("bind error~!\n");
    return -1;
}

//调用recvfroom,等待接收客户端数据
peerlen = sizeof(cliaddr);
while(1)
{
    printf("Begin recv!\n");
    recvfrom(fd, buf, sizeof(buf), 0, (struct sockaddr *)&cliaddr ,&peerlen);
    printf("recv form client %s \n", buf);

    strcpy(buf, "Welcome to server");
    sendto(fd, &buf, sizeof(buf), 0, (struct sockaddr *)&cliaddr ,peerlen);
}

close(fd);
return 0;

}

client.c:
#include "client.h"

#define PORT 2345
#define IP "192.168.0.114"

int main (void)
{
int fd;
struct sockaddr_in servaddr;
char buf[BUFFER_SIZE] = "Hello Server!";

//建立socket连接
fd = socket(AF_INET, SOCK_DGRAM, 0);

if(fd == -1)
{
    printf("fd error \n");
    exit(-1);
}

//设置sockaddr_in参数
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(PORT);
servaddr.sin_addr.s_addr = inet_addr(IP);

//向服务器发送消息
sendto(fd, buf, sizeof(buf), 0 ,(struct sockaddr *)&servaddr,sizeof(servaddr));
printf("Send message to Sever!\n");
//接收服务器消息
printf("Begin recv!\n");
recvfrom(fd, buf, sizeof(buf), 0 ,NULL ,NULL);
if(recvfrom < 0)
{
    printf("recv error!\n");
    return 1;
}

printf("recv from Server %s \n", buf);


close(fd);
return 0;

}

  • 写回答

3条回答 默认 最新

  • oyljerry 2016-07-27 02:51
    关注

    先看看server有没有收到任何信息,然后就是客户端发送的时候,是否返回失败等。还有就是网络中防火墙等。IP地址是否正确

    评论

报告相同问题?

悬赏问题

  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler