LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 689|回复: 2

请问recvfrom()是不是不能接收本机发送的信息?

[复制链接]
发表于 2005-5-19 11:46:45 | 显示全部楼层 |阅读模式
我在同一台机器上运行一个客户程序和服务器程序,当我创建客户端套接口信息的时候,会出现bad address错误,但用NULL的话能成功接收,请问是怎么回事?
n = recvfrom(sockfd,mesg, MAX_LINE, 0,(struct sockaddr*)&client_addr,sizeof(struct sockaddr_in));
//n = recvfrom(sockfd,mesg, MAX_LINE, 0,NULL,NULL);
/*这个成功接收*/
if (n <= 0)
{
                perror("socket closed by remote client");                                continue;
                       
else
{
        //mesg[MAX_LINE]="\0";
        printf("%s",&mesg);
}
发表于 2005-5-19 11:52:37 | 显示全部楼层
recvfrom的最后一个参数是指针来的,双向的。怎么可以用sizeof?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-19 15:31:02 | 显示全部楼层
确实错了,按你说的接收成功。把程序改了改,接收之后就向客户端回射信息,没什么问题
select(nWidth, &readFds, NULL, NULL,&timeout);
                if(FD_ISSET(sockfd, &readFds))
                {
                        n = recvfrom(sockfd,mesg, MAX_LINE, 0,(struct sockaddr*)&cliaddr,addrlen);
                        if (n <= 0)
                        {
                                perror("socket closed by remote client");
                                lostrecv++;
                                continue;
                        }
                        else
                        {
                                printf("received message:%s\n",&mesg);
                        }
                        totalrecv++;
                        n = sendto(sockfd,sendmsg,sizeof(sendmsg), 0,(struct sockaddr*)&cliaddr,sizeof(struct sockaddr));
                        if(n<=0)
                        {
                                perror("sendmessage error:");
                                continue;
                        }                       
                }

//////////////////////////////////////////////////////////////////////////       
但是客户端接收时却出现Invalid argument接收错误,又搞不明白了。
n=sendto(sockfd, sendline, strlen(sendline), 0, (struct sockaddr*)&servaddr, sizeof(servaddr));
                if(n<=0)
                {
                        perror("send error:");
                        continue;
                }               
                //////////////////////////////////////////////recvfrom
                select(nWidth, &readFds, NULL, NULL,&timeout);
                if(FD_ISSET(sockfd, &readFds))
                {
                        n = recvfrom(sockfd,recv_buffer, MAX_LINE, 0,(struct sockaddr*)&cliaddr,addrlen);
                        if (n <= 0)
                        {
                                perror("recv error:");                               
                                continue;
                        }
                        else
                        {                       
                                printf("received message:%s\n",&recv_buffer);
                        }
                }
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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