UDP传输数据

来源:互联网 发布:手机查看移动网络信号 编辑:程序博客网 时间:2024/05/22 04:54
void client(int sock){  
    //2、设置客户端socket参数  
    struct sockaddr_in servaddr; // 声明一个sockaddr_in 类型的变量servaddr
    memset(&servaddr, 0, sizeof(servaddr));  //初始化数组,释放变量使用控件
    //3、设置传输协议、端口以及目的地址  
    servaddr.sin_family = AF_INET;  //传输协议
    servaddr.sin_port = htons(5188); // 端口
    servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");  //目的地址
    //4、创建发送与接收缓存字节数组  
    int ret;  
    char sendbuf[1024] = {0};  //发送
    char recvbuf[1024] = {0};  //接收缓存
    //5、开始发送数据(此处是发送来自标准输入的数据)  
    while(fgets(sendbuf, sizeof(sendbuf), stdin) != NULL){  /* 每行的字符不能超过sizeof(sendbuf)才能正常工作 */
        sendto(sock, sendbuf, strlen(sendbuf), 0, (struct sockaddr *)&servaddr, sizeof(servaddr)); // sendto()适用于发送未建立连接的UDP数据包
        //6、开始接收数据,接收服务端返回的数据  

        ret = recvfrom(sock, recvbuf, sizeof(recvbuf), 0, NULL, NULL);  //recvfrom()接收一个数据报并保存源地址。

        if(ret == -1){  
            perror("recvfrom");  
            exit(EXIT_FAILURE);  
        }  
  
        //fputs(recvbuf, stdout);       //将服务端返回的数据写入到标准输出  
          
        //7、清空发送与接收缓存  
        memset(sendbuf, 0, sizeof(sendbuf));  
        memset(recvbuf, 0, sizeof(recvbuf));  
    }  
    //8、关闭socket流  
    close(sock);  
}  
  
int main(void){  
    int sock;  
    //1.创建客户端的socket  
    if((sock = socket(PF_INET, SOCK_DGRAM, 0)) < 0){  
        perror("socket");  
        exit(EXIT_FAILURE);  
    }  
    client(sock);  
    return 0;  
}