linux 网络编程 sendto 问题 50

#include<sys/socket.h>#include<netinet/in.h>#include<stdio.h>#include<stdlib.h>#inclu... #include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>

int main (int argc,char *argv[])
{
struct sockaddr_in to_addr;
struct sockaddr * sock_addr;

int socketd;
char *addr_char="192.168.1.1";
char *send_mess="abcdefg";
int send_flag=0;

to_addr.sin_port=4444;
inet_aton(addr_char,(struct in_addr *)&to_addr.sin_addr);
sock_addr = (struct sockaddr *)&to_addr;
socketd=socket(AF_INET,SOCK_DGRAM,0);

send_flag=sendto(socketd,send_mess,10,0,sock_addr,sizeof(to_addr));
printf("%d\n%d\n",socketd,send_flag);

这是源程序,现在问题是,sendto函数总是返回-1,出错。帮我分析一下参数,到底哪里出错了。
展开
 我来答
浙江启扬智能科技有限公司 2023-06-12
展开全部
ARM,Android,Linux之间并无直接联系。ARM是嵌入式CPU,Andrioid和Linux是操作系统。 ARM不是为Linux而设计,Linux也不是为ARM而设计,二者是独立存在的。Linux和Android可以移植到以ARM为核心的硬件平台下工作。因此可以认为他们是没有关系的。ARM由于资源较多可以运行操作系统。运行操作系统后,ARM系统地变成更加灵活,特别是对于语音/图像的处理以及与网络的通讯都可以使用操作系统的库文件,这样就大大减轻了程序工作量。浙江启扬是ARM嵌入式这方面的专家,十多年来,一直专业研发、生产和销售高性能、低功耗、低成本的嵌入式主板。在工业控制…
百度网友48d5f169c
2008-06-09 · 超过11用户采纳过TA的回答
知道答主
回答量:75
采纳率:0%
帮助的人:0
展开全部
sendto(经socket传送数据)
相关函数 send , sendmsg,recv , recvfrom , socket

表头文件 #include < sys/types.h >
#include < sys/socket.h >

定义函数 int sendto ( int s , const void * msg, int len, unsigned int flags, const
struct sockaddr * to , int tolen ) ;

函数说明 sendto() 用来将数据由指定的socket传给对方主机。参数s为已建好连线的socket,如果利用UDP协议则不需经过连线操作。参数msg指向欲连线的数据内容,参数flags 一般设0,详细描述请参考send()。参数to用来指定欲传送的网络地址,结构sockaddr请参考bind()。参数tolen为sockaddr的结果长度。

返回值 成功则返回实际传送出去的字符数,失败返回-1,错误原因存于errno 中。

错误代码 EBADF 参数s非法的socket处理代码。
EFAULT 参数中有一指针指向无法存取的内存空间。
WNOTSOCK canshu s为一文件描述词,非socket。
EINTR 被信号所中断。
EAGAIN 此动作会令进程阻断,但参数s的soket为补课阻断的。
ENOBUFS 系统的缓冲内存不足。
EINVAL 传给系统调用的参数不正确。

范例 #include < sys/types.h >
#include < sys/socket.h >
# include <netinet.in.h>
#include <arpa.inet.h>
#define PORT 2345 /*使用的port*/
main(){
int sockfd,len;
struct sockaddr_in addr;
char buffer[256];
/*建立socket*/
if(sockfd=socket (AF_INET,SOCK_DGRAM,0))<0){
perror (“socket”);
exit(1);
}
/*填写sockaddr_in 结构*/
bzero ( &addr, sizeof(addr) );
addr.sin_family=AF_INET;
addr.sin_port=htons(PORT);
addr.sin_addr=hton1(INADDR_ANY) ;
if (bind(sockfd, &addr, sizeof(addr))<0){
perror(“connect”);
exit(1);
}
while(1){
bezro(buffer,sizeof(buffer));
len = recvfrom(socket,buffer,sizeof(buffer), 0 , &addr &addr_len);
/*显示client端的网络地址*/
printf(“receive from %s\n “ , inet_ntoa( addr.sin_addr));
/*将字串返回给client端*/
sendto(sockfd,buffer,len,0,&addr,addr_len);”
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
浙江启扬智能科技有限公司
2023-06-12 广告
Android和ARM、Linux之间存在密切的联系。Android是一种基于Linux内核的嵌入式智能操作系统,它采用了ARM处理器作为其主要处理器架构。Android的内核和许多应用程序都是基于ARM架构编写的,包括处理器和内存管理器。... 点击进入详情页
本回答由浙江启扬智能科技有限公司提供
_nie12
2012-03-18
知道答主
回答量:5
采纳率:0%
帮助的人:3.5万
展开全部
显然这里没有绑定啊,直接创建一个socket怎么能用呢?查一下bind函数吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式