实现在Linux环境下的UDP通信测试。

注释了while循环,将代码规范化。

udpserver.c代码:

/**********************************************************************
* 版权所有 (C)2016, WangSq。
*
* 文件名称:xx.c
* 文件标识:无
* 内容摘要:udpserver演示程序
* 其它说明:无
* 当前版本:V1.0
* 作 者:WangSq
* 完成日期:2016
*
**********************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h> #include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
/********************socket相关******************************************/
//socket参数
#define SERVER_PORT 2234 /*监听端口*/
#define MAX_MSG_SIZE 256 /*recv缓冲器大小*/
int sockfd; //套接字描述符 /*客户机的地址信息及长度信息*/
struct sockaddr_in client;
int client_len=sizeof(struct sockaddr_in); //udp服务器监听函数初始化
void udpser_init()
{
/*服务器的地址信息*/
struct sockaddr_in server; /*服务器填充sockaddr server结构*/
bzero(&server,sizeof(server));
server.sin_family=AF_INET;
server.sin_addr.s_addr=htonl(INADDR_ANY);
server.sin_port=htons(SERVER_PORT); /*服务器建立socket描述符*/
if(- == (sockfd=socket(AF_INET, SOCK_DGRAM,)))
{
perror("create socket failed");
exit ();
}
/*捆绑socket描述符sockfd*/
if(- == ( bind( sockfd, ( struct sockaddr * )&server, sizeof(server) )) )
{
perror("bind error");
exit ();
}
} /*接收缓冲区--------------------len =4-----------------*/
unsigned char message[MAX_MSG_SIZE];
int recv_len=;
/* IP地址的存放缓冲区*/
char addr_p[INET_ADDRSTRLEN];
char *sndbuf = "Hello! i am OK.\n";
/**********************************************************************
* 功能描述:主函数
* 输入参数:无
* 输出参数:无
* 返 回 值:无
* 其它说明:无
* 修改日期 版本号 修改人 修改内容
* -------------------------------------------------------------------
* 2016xxxx V1.0 WangSq 创建
***********************************************************************/
int main(int argc, char *argv[])
{ //udp服务器监听函数初始化
udpser_init();
// while(1)
// {
/********************************接收数据并打印*************************/
recv_len=recvfrom(sockfd,message,sizeof(message),,(struct sockaddr *)&client,&client_len); //阻塞式
if(recv_len <)
{
printf("recvfrom error\n");
exit();
}
/*打印客户端地址和端口号*/
inet_ntop(AF_INET,&client.sin_addr,addr_p,sizeof(addr_p));
printf("client IP is %s, port is %d\n",addr_p,ntohs(client.sin_port));
message[recv_len]='\0';
/*显示消息长度*/
printf("server received %d:%s\n", recv_len, message); /********************************回发数据*************************/
if(sendto(sockfd,sndbuf,strlen(sndbuf),,(struct sockaddr*)&client,client_len)<)
{
printf("sendto error\n");
exit();
}
// }
return ;
}

udpclient.c代码:

/**********************************************************************
* 版权所有 (C)2016, WangSq。
*
* 文件名称:xx.c
* 文件标识:无
* 内容摘要:udpclient演示程序
* 其它说明:无
* 当前版本:V1.0
* 作 者:WangSq
* 完成日期:2016
*
**********************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h> #include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <unistd.h> /**********************************************************************
* 功能描述:主函数
* 输入参数:无
* 输出参数:无
* 返 回 值:无
* 其它说明:无
* 修改日期 版本号 修改人 修改内容
* -------------------------------------------------------------------
* 2016xxxx V1.0 WangSq 创建
***********************************************************************/
#define UDP_TEST_PORT 2234 #define UDP_SERVER_IP "192.168.1.10" #define MAX_LINE 80 int main(int argC, char* arg[]) { struct sockaddr_in server; int sockfd, len = ; int server_len = sizeof(struct sockaddr_in); char *sendStr ="i am a client\n"; //默认发送串 char buf[MAX_LINE];//接收缓冲区 /* setup a socket,attention: must be SOCK_DGRAM */
if ((sockfd = socket(AF_INET, SOCK_DGRAM, )) < ) { perror("socket");
exit();
} /*complete the struct: sockaddr_in*/
bzero(&server, sizeof(server));
server.sin_family = AF_INET;
server.sin_port = htons(UDP_TEST_PORT);
server.sin_addr.s_addr = inet_addr(UDP_SERVER_IP); // while(1) { //printf("Please enter a string to send to server: \n"); /* get the string from standard in*/ //len = read(STDIN_FILENO, buf, sizeof(buf)); /* send the string to server*/ if(sendto(sockfd, sendStr, strlen(sendStr), , (struct sockaddr *)&server, server_len)<) //sizeof
{
printf("sendto error\n");
exit();
} memset(buf, , sizeof(buf)); /* recieve the string from server*/ len = recvfrom(sockfd, buf, sizeof(buf), , (struct sockaddr *)&server, &server_len);
if(len <)
{
printf("recvfrom error\n");
exit();
}
printf("Receive from server: %s\n", buf); // } return ; }

Makefile:

all :        udpserver udpclient
udpserver: udpserver.c
gcc udpserver.c -o udpserver
udpclient: udpclient.c
gcc udpclient.c -o udpclient clean:
rm *.o udpserver udpclient .PHONY: clean

  好久没有在这里写博客了,希望自己多多加油,多实践,多思考!

Linux下UDP一发一收通信的更多相关文章

  1. Linux下UDP简介及程序设计

    一.UDP简介 UDP(User Datagram Protocol),用户数据报协议,是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务.UDP提供了无连接通信,且不对传 ...

  2. Linux下c开发 之 线程通信(转)

    Linux下c开发 之 线程通信(转) 1.Linux“线程” 进程与线程之间是有区别的,不过Linux内核只提供了轻量进程的支持,未实现线程模型.Linux是一种“多进程单线程”的操作系统.Linu ...

  3. Linux下c开发 之 线程通信

    Linux下c开发 之 线程通信 1.Linux“线程” 进程与线程之间是有区别的,不过Linux内核只提供了轻量进程的支持,未实现线程模型.Linux是一种“多进程单线程”的操作系统.Linux本身 ...

  4. QT下UDP套接字通信——QUdpSocket 简单使用

    QT下UDP套接字通信--QUdpSocket QUdpSocket类提供一个UDP套接字. UDP(用户数据报协议)是一种轻量级.不可靠.面向数据报.无连接的协议.它可以在可靠性不重要的情况下使用. ...

  5. Linux下UDP发送大量请求导致Operation not permitted的问题探讨

    一.问题背景目前公司准备上微服务的架构模式,在对比大量的API网关之后,最后选中了Kong作为我们的API网关,在经过大量的研究之后,啊呸,踩坑之后,终于跑起来了,简直是普天同庆,撒花祝贺. 但是在美 ...

  6. Linux下UDP收/发广播消息简单实现

    发送广播消息 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<sys/typ ...

  7. linux下C语言实现多线程通信—环形缓冲区,可用于生产者(producer)/消费者(consumer)【转】

    转自:http://blog.chinaunix.net/uid-28458801-id-4262445.html 操作系统:ubuntu10.04 前言:     在嵌入式开发中,只要是带操作系统的 ...

  8. linux下udp编程

    #include<sys/types.h> #include<sys/socket.h> #include<unistd.h> #include<netine ...

  9. c++ 网络编程(一)TCP/UDP windows/linux 下入门级socket通信 客户端与服务端交互代码

    原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/9601511.html c++ 网络编程(一)TCP/UDP  入门级客户端与服务端交互代码 网 ...

随机推荐

  1. The Bits (思维+找规律)

    Description Rudolf is on his way to the castle. Before getting into the castle, the security staff a ...

  2. 《JavaScript》web客户端存储

    Web存储: 兼容IE8在内的所有主流浏览器,不兼容早期浏览器:支持大容量但非无限量 LocalStorage和sessionStorage是window对象的两个属性,这两个属性都代表同一个stor ...

  3. 项目Beta冲刺(团队)第二天

    1.昨天的困难 夜间模式实现的时候一点击开关就会出现app黑屏卡死的状态,recreate()方法实现有问题 服务器有点问题 2.今天解决的进度 成员 进度 陈家权 研究如何实现私信模块 赖晓连 最新 ...

  4. HDU 5672 String

    题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5672 bc(中文):http://bestcoder.hdu.edu.cn/contests ...

  5. .NET Core使用EF分页查询数据报错:OFFSET语法错误问题

    在Asp.Net Core MVC项目中使用EF分页查询数据时遇到一个比较麻烦的问题,系统会报如下错误: 分页查询代码: ) * condition.PageSize).Take(condition. ...

  6. vim 简单用法

    vim 是一个纯文本编辑器 模式化的编辑器 1:编辑模式2:输入模式3:末行模式 : 具有命令的接口,在末行模式中可以直接的通过命令修改vim编辑器打开的文本文件 模式转换 1:编辑模式—>输入 ...

  7. 对IT行业的一些思考

          阅读完两篇报道,从“2014年十大最热门行业和职业排行榜”可以看出最热门的行业是IT行业,可以看出IT行业在未来的发展前景很乐观,选择IT行业的人也会越来越多,IT行业也会越来越庞大.但是 ...

  8. C语言文法阅读与理解

    <翻译单元>--><外部声明>--><函数定义>|<申报> <函数定义>--><声明说明符>-->< ...

  9. JVM 内部原理系列

    JVM 内部原理(一)— 概述 JVM 内部原理(二)— 基本概念之字节码 JVM 内部原理(三)— 基本概念之类文件格式 JVM 内部原理(四)— 基本概念之 JVM 结构 JVM 内部原理(五)— ...

  10. CERC2013(C)_Magical GCD

    题意是这样的,给你一个序列a[i],需要你选一段连续的序列a[i]到a[j],使得长度乘以这个段的gcd最大. 一开始总是以为是各种神奇的数据结构,诶,后来才发现,机智才是王道啊. 可以这样考虑,每次 ...