(一)UDP基本编程步骤
来源:互联网 发布:java开发经验造假 编辑:程序博客网 时间:2024/05/16 01:27
UDP服务端编程分5步:
1.创建 UDP socket套接字,用socket函数。
2.设置socket的属性,用setsockopt()函数,(可选)
3.往socket绑定包含 IP信息,地址信息的 struct sockaddr_in(IPv4)结构体。用bind()函数
4.循环接收消息,用recvfrom()函数
5.关闭socket套接字
UDP客户端编程分:
1.创建 UDP socket套接字,用socket函数。
2.用sendto()函数往指定的IP,地址发送信息。
UDP的发送函数sendto()和接收函数 recvfrom():
1.sendto():
int ret = recvfrom(int sockfd,void *buf,size_t len,0, struct sockaddr *to , int fromlen);
第一个参数为服务端的udp监听套接字
第二个参数为发送数据的缓冲区
第三个参数为缓存区的大小
第四个参数一般为0;
第五个参数一般为:记录地址信息,ip信息的结构体 。
第六个参数为:第五个参数的大小。
返回值:成功返回实际发送出去的信息的字节数,失败返回-1
2.recvfrom():
int ret = recvfrom(int sockfd,void *buf,size_t len,0, struct sockaddr *from,socket_t *fromlen);
第一个参数为服务端的udp监听套接字
第二个参数为接收数据的缓冲区
第三个参数为缓存区的大小
第四个参数一般为0;
第五个参数一般为:记录地址信息,ip信息的结构体 。
第六个参数为:第五个参数的大小,取地址。
返回值:成功返回接收到的信息的字节数,失败返回-1
头文件:
#ifndef _MYHEAD_H_#define _MYHEAD_H_#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <strings.h>#include <unistd.h>#include <errno.h>#include <sys/stat.h>#include <dirent.h>#include <sys/mman.h>#include <sys/wait.h>#include <signal.h>#include <sys/ipc.h>#include <sys/shm.h>#include <sys/msg.h>#include <sys/sem.h>#include <pthread.h>#include <semaphore.h>#include <poll.h>#include <sys/epoll.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <netinet/in.h>#endif
服务端:
#include"myhead.h"char rbuf[50];int main(){int sockfd;int size;int ret;int on =1;struct sockaddr_in saddr;struct sockaddr_in raddr;//设置地址信息,ip信息size = sizeof(struct sockaddr_in);bzero(&saddr,size);saddr.sin_family = AF_INET;saddr.sin_port = htons(8888);saddr.sin_addr.s_addr = htonl(INADDR_ANY);//创建udp 的套接字sockfd = socket(AF_INET,SOCK_DGRAM,0);if(sockfd<0){perror("socket failed");return -1;}//设置端口复用setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on)); //绑定地址信息,ip信息ret = bind(sockfd,(struct sockaddr*)&saddr,sizeof(struct sockaddr));if(ret<0){perror("sbind failed");return -1;}int val = sizeof(struct sockaddr);//循环接收客户端发来的消息while(1){puts("waiting data");ret=recvfrom(sockfd,rbuf,50,0,(struct sockaddr*)&raddr,&val);if(ret <0){perror("recvfrom failed");}printf("the data :%s\n",rbuf);bzero(rbuf,50);}//关闭udp套接字,这里不可达的。close(sockfd);return 0;}
客户端:
#include"myhead.h"char wbuf[50];int main(){int sockfd;int size,on = 1;struct sockaddr_in saddr;int ret;size = sizeof(struct sockaddr_in);bzero(&saddr,size);//设置地址信息,ip信息saddr.sin_family = AF_INET;saddr.sin_port = htons(8888);saddr.sin_addr.s_addr = inet_addr("192.168.152.128");//192.168.152.128为服务端所在的ip,由于本代码是本机测试,所以写的是自己的ip//创建udp 的套接字sockfd= socket(AF_INET,SOCK_DGRAM,0);if(sockfd<0){perror("failed socket");return -1;}//设置端口复用setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on));//循环发送信息给服务端while(1){puts("please enter data:");scanf("%s",wbuf);ret=sendto(sockfd,wbuf,50,0,(struct sockaddr*)&saddr,sizeof(struct sockaddr));if(ret<0){perror("sendto failed");}bzero(wbuf,50);}close(sockfd);return 0;}
- (一)UDP基本编程步骤
- 网络编程UDP(一)
- MyBatis (一)基本步骤
- UNP卷一学习笔记:基本UDP套接字编程
- 基本UDP套节口编程:
- TCP,UDP基本编程
- udp基本网络编程
- TCP/UDP Socket编程步骤
- TCP/UDP Socket编程步骤
- TCP/UDP Socket编程步骤
- TCP/UDP Socket编程步骤
- TCP/UDP Socket编程步骤
- 基于UDP的编程步骤
- 黑马程序员-------Java笔记--------网络编程(UDP与TCP基本步骤)
- 网络编程(一)UDP的使用
- Android网络编程TCP、UDP(一)
- Android网络编程TCP、UDP(一)
- Udp网络编程(一)
- 同名参数
- struts2拦截器配置
- Cocos2d-x 运行窗口左下角信息的含义
- 項目「quick」中まとめした共通方法
- 想学习这篇文章的叙事风格写作思路,佩服作者的逻辑表达能力
- (一)UDP基本编程步骤
- Java设计模式之——观察者模式(Observer)
- CODEVS1067:机器翻译(模拟水题)
- 关系代数和SQL练习(一)
- 处理器字节大小端存储方式、网络字节顺序(总结)
- 读取配置文件的类 ResourcesUtil
- java中请求响应时间监控
- redis是什么?
- JAVA中多线程知识点《上》