当前位置: 首页 > 知识库问答 >
问题:

Recvfrom函数的客户端问题

晏富
2023-03-14

胡,伙计们,

我被这个问题困扰了很长时间,请帮助我!我有一台笔记本电脑上的服务器,它正在向另一台笔记本电脑上的客户端发送数据,这台笔记本电脑是同一局域网。我可以在服务器端和客户端的wireshark上看到udp数据包。。。但问题出在代码中,客户端只是停留在“printf”行(“打开数据报套接字…确定。\n”)为什么从服务器接收的buf不能打印?正如我所说,数据包在wireshark中是可见的,这让我很困惑:S

有什么建议吗。。。

int main(){

struct sockaddr_in srv_addr;
int sd,fd,datalen,numRead;
ssize_t nbytes,numWrite;
socklen_t addrlen=sizeof(struct sockaddr_in);
char buf[MAX_SIZE],tmp[MAX_SIZE];


if((sd = socket(AF_INET, SOCK_DGRAM, 0))<0){
    printf("Opening datagram socket error",strerror(errno));
    return 1;

}else{
    printf("Opening datagram socket....OK.\n");
}

memset((char *) &srv_addr, 0, sizeof(srv_addr));
srv_addr.sin_family = AF_INET;
srv_addr.sin_port = htons(PORT_NUM);
srv_addr.sin_addr.s_addr = inet_addr(IP_SERVER);
memset(buf,0,MAX_SIZE);

while(1){

   nbytes = recvfrom(sd,buf,MAX_SIZE,0,(struct sockaddr *)&srv_addr, &addrlen);

    if(nbytes != -1){

        printf("The %s message from server\n",buf);


}else{

    printf("Recvfrom error %s\n",strerror(errno));    

}

return 0;

}

共有1个答案

西门奇希
2023-03-14

您缺少一个bind()调用。

bind(sd, (SOCKADDR*) &srv_addr, sizeof (srv_addr));

绑定在两端总是必要的,否则套接字不知道它在哪个端口/接口上操作。

此外,还必须将套接字绑定到本地计算机上的接口<代码>srv_addr。sin_addr。s_addr=inet_addr(IP_服务器) 定义接口,由其IP标识,套接字绑定并侦听。如果要限制通信伙伴,必须检查recvfrom返回的sockaddr结构(第5个参数)

inet_addr(IP_SERVER)替换为htonl(INADDR_ANY)。这将告诉您的套接字监听本地计算机上可用的每个接口。

 类似资料:
  • 我正在编写udp服务器/客户端应用程序,其中服务器发送数据,客户端接收数据。当数据包丢失时,客户端应该向服务器发送nack。我将套接字设置为O_NONBLOCK,这样我就可以注意到客户端是否没有收到数据包 我的问题是,若服务器并没有开始发送数据包,那个么客户端的行为就是数据包丢失,并且开始向服务器发送nack。(没有可用数据时recvfrom失败)我需要一些建议,如果服务器没有开始发送数据包,如果

  • 我现在用C/C做并发套接字编程。我只是让服务器接收来自客户端的请求,并将响应数据包发送给客户端。我使用一个线程来接收来自客户端的请求。当服务器得到一个新请求时,一个新的线程将被创建,以便向客户端发送一些数据包。然而,当我的服务器向该特定客户端发送数据包时,我的客户端的recvfrom总是返回winsock错误10054。

  • 我使用的是kafka-clients-0.10.1.1(单节点单代理) auto.create.topics.enable的默认值为true。 1.我正在使用以下方式向主题发送消息: 用于消费:

  • 1、MVC、MVP、MVVM的区别 MVC 模式将程序分为三个部分:模型 、视图(xml文件)、控制器(activity)。目的:将业务逻辑放在控制器里,把业务逻辑和视图层分离;缺点:Activity变得臃肿,Model 将新的数据发送到 View。 MVP 模式将程序分为三个部分:模型、视图(activity)、管理层(Presenter)。MVC模式的View 层和 Model 层存在耦合,M

  • 尝试使用Spring Cloud编写Eureka客户端Netflixv1.2.0。发布但面临以下提到的问题。PFB代码和配置。 EurekaClient。Java语言 应用yml公司 独自创立yml公司 客户端无法启动,出现以下错误 "EurekaDiscoveryClientConfiguration$EurekaHealthIndexorg.springframework.cloud.netf

  • 我不确定这是否可能,我已经配置了一个icecast服务器并流媒体音乐,我想使用Java(或grails)创建一个web播放器。我设法让java web应用程序播放icecast正在流式播放的音乐,使用如下所示: 几句台词后,音乐开始播放,问题是,如果我用web应用程序关闭选项卡,音乐就会继续播放,我必须停止应用程序才能停止播放,但当我再次启动它并尝试再次播放时,这就像icecast服务器在后台继续