linux 网络编程 sendto 问题

来源:百度知道 编辑:UC知道 时间:2024/06/08 12:58:10
#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,出错。帮我分析一下参数,到底哪里出错了。

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 soc