宏观操作
服务器:socket创套接字—bind绑定连接—recvfrom接收数据/sendto发送数据
客户端:socket创套接字—sendto发送数/recvfrom接收数据—close关闭套接字
函数
recv
ssize_t recvfrom ( int sockfd , void * buf , size_t len , int flags , struct sockaddr * src_addr , socklen_t * addrlen );recv(sock套接字,buf地址,buf大小,0,发送端结构体的指针,指针大小)
返回值:
成功:接收字节个数
失败:-1
0:客户端退出=quit
sendto
ssize_t sendto ( int sockfd , const void * buf , size_t len , int flags , const struct sockaddr * dest_addr , socklen_t addrlen );sendto(sock套接字,buf地址,buf大小,0,接收端结构体的指针,指针大小)
返回值:
成功:接收字节个数
失败:-1
UDP客户端
头文件:
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <errno.h>
#include<stdio.h>
#include <netinet/in.h>
#include <netinet/ip.h> /* superset of previous */
#include <arpa/inet.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>//创建套接字 int sockfd=socket(AF_INET,SOCK_DGRAM,0); if(sock<0) { perror("sock err");return -1;}printf("sock ok"); struct sockaddr_in shiny; //发送 struct sockaddr_in addr; addr.sin_family=AF_INET; addr.sin_port=htons(atoi(argv[2])) addr.sin_addr.s_addr=inet_addr(argv[1]); socklen_taddrlen=sizeof(addr); #define N 64 char buf[N]={"helloworld"}; sendto(sockfd,buf,N,0,(struct sockaddr*)&shiny,&addr,addrlen); //关闭文件描述符 close(sockfd); return 0; }