linux网络编程之socket(UDP)

来源:互联网 发布:u型铝合金网络桥架 编辑:程序博客网 时间:2024/05/02 04:32

UDP是一种面向无连接的通信协议,最近学习了一下socket网络编程,以下示例是基于UDP流协议实现的,需要的朋友可以参考下。

/*基于UDP的socket编程。服务器端UDP适合用于一次传送少量数据、对可靠性要求不高的应用环境。TCP使用的是流套接字(SOCK_STREAM),UDP使用的是数据报套接字(SOCK_DGRAM)2016-4-10*/#include <sys/types.h>#include <sys/socket.h>#include <unistd.h>#include <netinet/in.h>#include <arpa/inet.h>#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <netdb.h>#include <stdarg.h>#include <string.h>#define SERVER_PORT 7000#define BUFFER_SIZE 1024int main(){//初始化UDP参数struct sockaddr_in server_addr;bzero(&server_addr,sizeof(server_addr));//与memset功能类似server_addr.sin_family = AF_INET;server_addr.sin_addr.s_addr = htonl(INADDR_ANY);server_addr.sin_port=htons(SERVER_PORT);//创建socketint server_socket_fd = socket(AF_INET,SOCK_DGRAM,0);if(server_socket_fd == -1){perror("create socket failed\n");exit(1);}//绑定套接字if(-1 == (bind(server_socket_fd,(struct sockaddr*)&server_addr,sizeof(server_addr)))){perror("server bind failed!\n");exit(1);}printf("--------waiting receive message----------\n");//数据传输while(1){//定义一个地址,用于捕获客户端地址struct sockaddr_in client_addr;socklen_t client_addr_length = sizeof(client_addr);//接收数据char buffer[BUFFER_SIZE];bzero(buffer,BUFFER_SIZE);if(recvfrom(server_socket_fd,buffer,BUFFER_SIZE,0,(struct sockaddr*)&client_addr,&client_addr_length) == -1){perror("receive data failed!\n");exit(1);}printf("%s\n",buffer);}close(server_socket_fd);return 0;}

/*基于UDP的socket编程客户端流程1、创建一个socket,用函数socket();2、发送数据,用函数sendto();3、关闭网络连接*/#include <sys/types.h>#include <sys/socket.h>#include <unistd.h>#include <netinet/in.h>#include <arpa/inet.h>#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <netdb.h>#include <stdarg.h>#include <string.h>#define SERVER_PORT 7000#define BUFFER_SIZE 1024int main(){//初始化参数struct sockaddr_in server_addr;bzero(&server_addr,sizeof(server_addr));server_addr.sin_family=AF_INET;server_addr.sin_addr.s_addr=inet_addr("127.0.0.1");//127.0.0.1是本机的回环地址,主要用于测试。这个地址就代表电脑本身。server_addr.sin_port=htons(SERVER_PORT);//创建socketint client_socket_fd =socket(AF_INET,SOCK_DGRAM,0);if(client_socket_fd == -1){perror("Create socket failed!\n");exit(1);}//输入文件名到缓冲区char buffer[FILE_NAME_MAX_SIZE+1];bzero(buffer,FILE_NAME_MAX_SIZE+1);printf("please input message to server:     ");scanf("%s",buffer);//发送文件名 if(sendto(client_socket_fd, buffer, BUFFER_SIZE,0,(struct sockaddr*)&server_addr,sizeof(server_addr)) < 0) { perror("Send File Name Failed:"); exit(1); }   close(client_socket_fd); return 0; }
编译过程:

测试过程:




1 0