UDP相关函数
来源:互联网 发布:衣橱软件 编辑:程序博客网 时间:2024/04/28 20:03
欲函数的详细信息,请参考:http://blog.csdn.net/zscfa/article/details/53069499
涉及两个函数readfrom()和sendto()
1、readfrom()
原型:int recvfrom(int sockfd.void * buf,int len, unsigned int flags,struct sockaddr *from,int *fromlen);
作用:通过socket接收数据
参数:sockfd:socket描述符
buf:接收数据的空间
len:数据的长度
flags:一般设置为0
sockaddr:是连接客户端的socket
fromlen:sockaddr的长度的地址
返回值:成功返回接收到的字符数,失败-1
头文件:#include<sys/types.h>
#include<sys/socket.h>
2、sendto()
原型:int sendto(int sockfd,const void*msg,int len,unsigned int flags,const struct sockaddr *to,int tolen);
作用:通过socket传送数据
参数:sockfd:socket描述符
buf:接收数据的空间
len:数据的长度
flags:一般设置为0
sockaddr:是连接客户端的socket
fromlen:sockaddr的长度
返回值:成功返回实际传送出去的字符数,失败-1
头文件:#include<sys/types.h>
#include<sys/socket.h>
udpser.c
#include<stdio.h>#include<strings.h>#include<sys/types.h>#include<sys/socket.h>#include<arpa/inet.h>#include<errno.h>#include<stdlib.h>int main(){ int sockfd; int addrlen = sizeof(struct sockaddr); char buf[512]; struct sockaddr_in ser_addr; struct sockaddr_in cli_addr; sockfd = socket(AF_INET,SOCK_DGRAM,0); if(sockfd < 0) { printf("socket error!\n");exit(0); } bzero(&ser_addr,addrlen); ser_addr.sin_family = AF_INET; ser_addr.sin_port = htons(8888); ser_addr.sin_addr.s_addr = inet_addr("192.168.2.30"); //sleep(2); if((bind(sockfd,(struct sockaddr*)&ser_addr,addrlen)) < 0) { fprintf(stderr,"bind error:%s\n",strerror(errno));exit(1); } fprintf(stderr,"server get connection from %s\n",inet_ntoa(cli_addr.sin_addr)); while(1) { if(recvfrom(sockfd,buf,512,0,(struct sockaddr*)&cli_addr,&addrlen) < 0) { printf("recv error!\n"); } printf("read is = %s\n",buf); memset(buf,0,512);printf("please input a char:");fgets(buf,512,stdin); if(sendto(sockfd,buf,512,0,(struct sockaddr*)&cli_addr,addrlen) < 0) { printf("send error!\n"); } } close(sockfd);}
udpclien.c
#include<stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<arpa/inet.h>#include<strings.h>#include<errno.h>int main(){ int sockfd; int addrlen = sizeof(struct sockaddr); char buf[512]; struct sockaddr_in ser_addr; sockfd = socket(AF_INET,SOCK_DGRAM,0); if(sockfd < 0) { printf("socket error!\n"); } bzero(&ser_addr,addrlen); ser_addr.sin_family = AF_INET; ser_addr.sin_port = htons(8888); ser_addr.sin_addr.s_addr = inet_addr("192.168.2.30"); while(1) { printf("please input char:"); fgets(buf,512,stdin); if((sendto(sockfd,buf,512,0,(struct sockaddr*)&ser_addr,addrlen)) < 0) { fprintf(stderr,"send error:%s\n",strerror(errno)); } memset(buf,0,512);if(recvfrom(sockfd,buf,512,0,(struct sockaddr*)&ser_addr,&addrlen) <0){ fprintf(stderr,"recv error:%s\n",strerror(errno));}printf("read is %s\n",buf); } close(sockfd);}
- UDP相关函数
- UDP相关
- UDP套接口相关
- udp代码相关解释
- UDP打洞相关经验
- UDP面试相关
- TCP/UDP相关
- TCP、UDP 相关资料
- 网络编程--UDP相关
- TCP&UDP相关
- UDP协议相关解释
- Linux UDP相关
- TCP/UDP相关知识总汇
- TCP/UDP相关知识总汇
- TCP/UDP相关知识总汇
- TCP/UDP相关知识总汇
- tcp,udp,MTU相关知识
- TCP/UDP相关知识总汇
- BZOJ1025: [SCOI2009]游戏
- 工厂模式相关
- 托马斯和朋友儿童智能健康牙刷今日发布
- 通过shell脚本进行数据库操作
- 摆图片确定行数
- UDP相关函数
- noip模拟题11.8
- saturate_cast
- Ubuntu 14.04用配置文件配置静态IP和动态IP
- python中的队列、栈
- BZOJ1037: [ZJOI2008]生日聚会Party
- Android按名称排序,中英文混合排序
- LeetCode 35. Search Insert Position
- Android实现点击AlertDialog上按钮时不关闭对话框的方法