实现在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. netty初认识

    Netty是什么? 本质:JBoss做的一个Jar包 目的:快速开发高性能.高可靠性的网络服务器和客户端程序 优点:提供异步的.事件驱动的网络应用程序框架和工具 通俗的说:一个好使的处理Socket的 ...

  2. 王者荣耀交流协会第四次Scrum立会

    会议时间:2017年10月23号   18:00-18:28,时长28分钟. 会议地点:二食堂一楼第四个档口对着的靠路边的桌子. 立会内容: 1.小组成员汇报今日工作: 2.关于折线图与饼状图生成问题 ...

  3. 改进意见的答复及bug重现

    各组对本组的互评链接如下 Thunder:http://www.cnblogs.com/vector121/p/7905300.html 王者荣耀交流协会:http://www.cnblogs.com ...

  4. SSH 框架的心得

    使用SSH框架做完了一个普通网站的前后台项目,成热写点心得,免得以后再入坑.其中使用 Strust2  2.3.33 + Spring 4.3.9 + Hibernate 5.2.10 eclipse ...

  5. Hexo博客搭建全解

    [原创,转载请附网址:http://dongshuyan.top] 欢迎来到莫与的博客,第一篇记录了一下怎么写一篇博客,以方便之后写博客~ #从配置说起下载安装Git与Node.js略过 1.安装he ...

  6. 第8章 Linux磁盘与文件系统管理

    认识EXT2文件系统 文件的系统特性 Linux的正规文件系统为Ext2 文件数据除了文件实际内容外,还包括其他属性(文件权限.文件属性). 文件系统将这两部分数据分别存放在不同的块,权限和属性放在i ...

  7. QtCharts模块在QtWideget中图表绘制(非QML)

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QtCharts模块在QtWideget中图表绘制(非QML)     本文地址:http:/ ...

  8. python OCR 图形识别

    1.pip install pyocr 2.pip install PIL 3.安装tesseract-ocr http://jaist.dl.sourceforge.net/project/tess ...

  9. 【bzoj5197】[CERC2017]Gambling Guide 期望dp+堆优化Dijkstra

    题目描述 给定一张n个点,m条双向边的无向图. 你要从1号点走到n号点.当你位于x点时,你需要花1元钱,等概率随机地买到与x相邻的一个点的票,只有通过票才能走到其它点. 每当完成一次交易时,你可以选择 ...

  10. Jmeter远程启动负载机

    1.负载机下载Jmeter,设置环境变量,jmeter中进行启动jmeter-server的应用服务.环境变量设置如下: 变量名:JMETER_HOME 变量值:C:\Program Files\ap ...