您的位置:首页 > 理论基础 > 计算机网络

linux网络通信-------UDP协议

2017-06-21 22:50 225 查看
 UDP编程模型
UDP协议是长度固定的,无连接的不可靠报文传递,所以不像TCP协议那样需要在发送数据之前先建立连接

服务器
创建socket     socket
绑定地址     bind
接收数据     recvfrom
发送数据     sendto
结束连接     close

客户机    
创建socket    socket
发送数据     sendto
接收数据     recvfrom
结束连接     close

UDP服务器

#include
#include
#include
#include

#define PORT 8888
#define MSG_SIZE 128

void main()
{
    int sockfd;
    struct sockaddr_in
server_addr;
    struct sockaddr_in
client_addr;
    char
buffer[MSG_SIZE];
    int addrlen;
    int n;
     
    //创建socket
    sockfd = socket(AF_INET,
SOCK_DGRAM, 0);
    
    //绑定地址
    bzero(&server_addr,
sizeof(struct sockaddr_in));
    server_addr.sin_family =
AF_INET;
    server_addr.sin_port =
htons(PORT);
   
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    
    bind(sockfd, (struct
sockaddr *)(&server_addr), sizeof(struct sockaddr));
    
   
//接受数据 
    while(1)
    {
    addrlen = sizeof(struct
sockaddr);
    bzero(buffer,
sizeof(buffer));
    n = recvfrom(sockfd,
buffer, MSG_SIZE, 0, (struct sockaddr *)(&client_addr),
&addrlen);
    buffer
= 0;
    printf("server received
:%s\n", buffer);
    }
    
    
    //结束连接
    close(sockfd);
}

UDP客户端

#include
#include
#include
#include

#define BUF_SIZE 128
#define PORT 8888

void main(int argc, char **argv)
{
    int sockfd;
    char
buffer[BUF_SIZE];
    struct sockaddr_in
server_addr;
    
    if(argc != 2)
    {
    printf("Useage: %s
server_ip\n", argv[0]);
    exit(1);
    }
    
    //创建套接字
    sockfd = socket(AF_INET,
SOCK_DGRAM, 0);
    
    //初始化服务器地址
    bzero(&server_addr,
sizeof(struct sockaddr_in));
    server_addr.sin_family =
AF_INET;
    server_addr.sin_port =
htons(PORT);
    inet_aton(argv[1],
&server_addr.sin_addr);
    
    //发送数据
    while(1)
    {
    printf("please input
char:\n");
    fgets(buffer, BUF_SIZE,
stdin);
     
  sendto(sockfd, buffer, strlen(buffer), 0,
(struct sockaddr *)(&server_addr), sizeof(struct
sockaddr));
     
4000
  bzero(buffer, BUF_SIZE);
    }

    //关闭连接
    close(sockfd);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: