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,出错。帮我分析一下参数,到底哪里出错了。
展开
 我来答
百度网友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);”
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
_nie12
2012-03-18
知道答主
回答量:5
采纳率:0%
帮助的人:3.5万
展开全部
显然这里没有绑定啊,直接创建一个socket怎么能用呢?查一下bind函数吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式