实现在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. [转]Zookeeper系列(一)

    一.ZooKeeper的背景 1.1 认识ZooKeeper ZooKeeper---译名为“动物园管理员”.动物园里当然有好多的动物,游客可以根据动物园提供的向导图到不同的场馆观赏各种类型的动物,而 ...

  2. “Hello World!”团队第五周第三次会议

    今天是我们团队“Hello World!”团队第五周召开的第三次会议. 双十一大家过的怎么样?由于组内其他成员被“剁手”,今日会议记录由我来写. 博客内容: 一.会议时间 二.会议地点 三.会议成员 ...

  3. Codeforces Round #245 (Div. 1) B. Working out dp

    题目链接: http://codeforces.com/contest/429/problem/B B. Working out time limit per test2 secondsmemory ...

  4. Swift-setValuesForKeysWithDictionary

    重写 setValuesForKeysWithDictionary 那么字典中可以有的字段在类中没有对应属性 class Person : NSObject { var age :Int = // 重 ...

  5. 蜗牛慢慢爬 LeetCode 1.Two Sum [Difficulty: Easy]

    题目 Given an array of integers, return indices of the two numbers such that they add up to a specific ...

  6. Git回滚merge操作

    执行完merge操作后,没有修改代码 1.命令 ⑴ git reflog 查看merge操作的上一个提交记录的版本号 ⑵ git reset –hard 版本号 这样可以回滚到merge之前的状态 2 ...

  7. 框架整合小小总结【SSH】注解式

    Spring 注解式注册 bean: 大致分为以下几步: 开启 context 空间支持 开启自动扫描功能,指定扫描包路径 使用注解配置 bean (使用@Component 注解) 给 bean 注 ...

  8. chrome 常用插件集锦

    stylish 改变浏览器CSS样式

  9. 第74天:jQuery实现图片导航效果

    图片导航效果 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  10. CF373C-Counting Kangaroos is Fun

    题意 有\(n\)只袋鼠,每只袋鼠有一个体积,如果一个袋鼠的体积小于等于另一个袋鼠体积的一半,那么这个袋鼠就可以被那一个袋鼠装进袋里.一个装了袋鼠的袋鼠不能再装或被装.被装进袋子的袋鼠就看不到了. 问 ...