C语言sendto()函数:经socket传送数据
2017-04-06 00:16
423 查看
相关函数: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 中.
错误代码:
1、EBADF 参数s 非法的socket 处理代码.
2、EFAULT 参数中有一指针指向无法存取的内存空间.
3、WNOTSOCK canshu s 为一文件描述词, 非socket.
4、EINTR 被信号所中断.
5、EAGAIN 此动作会令进程阻断, 但参数s 的soket 为补课阻断的.
6、ENOBUFS 系统的缓冲内存不足.
7、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);
}
}
头文件:#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 中.
错误代码:
1、EBADF 参数s 非法的socket 处理代码.
2、EFAULT 参数中有一指针指向无法存取的内存空间.
3、WNOTSOCK canshu s 为一文件描述词, 非socket.
4、EINTR 被信号所中断.
5、EAGAIN 此动作会令进程阻断, 但参数s 的soket 为补课阻断的.
6、ENOBUFS 系统的缓冲内存不足.
7、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);
}
}
相关文章推荐
- C语言sendto()函数-经socket传送数据以及recvfrom函数《转》
- C语言sendto()函数:经socket传送数据
- C语言中经socket接收数据的相关函数详解
- Linux下Socket网络编程,文件传输,数据传输的C语言例子
- C语言使用scanf函数获取数据后,使用getchar()无法获得字符的处理方法
- Linux下Socket网络编程,文件传输,数据传输的C语言例子
- C语言操作mysql数据 常用函数
- [转]Linux下Socket网络编程,文件传输,数据传输的C语言例子
- C语言SOCKET发送int数据转char数据
- Linux下Socket网络编程,文件传输,数据传输的C语言例子
- [转]Linux下Socket网络编程,文件传输,数据传输的C语言例子
- socket编程:从send函数和sendto函数参数的不同看TCP和UDP的差别。
- 网络IPC, socket(4): 数据传输函数
- C语言中,将结构体指针传入函数后,内存地址没变,内存数据发生变化
- [C语言] 文件操作,对二进制文件追加二进制数据与补零的两个函数;
- C语言“全能比较函数”新鲜出炉(第二版),任意数据类型
- c语言socket 传输 大数据量
- socket简单实现ftp的文件传送(C++V2.0版,解决数据丢失问题)
- C语言之数据的输入输出scanf()函数
- Linux下Socket网络编程,文件传输,数据传输的C语言例子