server端

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h> void server(int sock){
//1、建立接收缓存字节数组
char recvbuf[] = {};
//2、定义socket
struct sockaddr_in peeraddr;
socklen_t peerlen;
int n;
while(){
//
peerlen = sizeof(peeraddr);
//3、清空接收缓存数组
memset(recvbuf, , sizeof(recvbuf));
//4、开始接收数据
n = recvfrom(sock, recvbuf, sizeof(recvbuf), , (struct sockaddr *)&peeraddr, &peerlen);
//5、判断是否接收完整数据
if(n == -){
perror("recvfrom");
exit(EXIT_FAILURE);
}else if(n > ){
//6、成功接收数据,将缓存数据写入到标准输出,打印到控制台
fputs(recvbuf, stdout);
//7、想客户端回送接收到的数据(回显客户端输入的数据)
sendto(sock, recvbuf, n, , (struct sockaddr *)&peeraddr, peerlen);
}
}
//关闭socket
close(sock);
} int main(void){
int sock;
//创建服务器socket
if((sock = socket(PF_INET, SOCK_DGRAM, )) < ){
perror("socket error");
exit(EXIT_FAILURE);
}
//设置服务器socket参数
struct sockaddr_in servaddr;
memset(&servaddr, , sizeof(servaddr));
//设置socket的协议、端口以及地址
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons();
servaddr.sin_addr.s_addr = htonl(INADDR_ANY); //将socket绑定地址
if(bind(sock, (struct sockaddr *)&servaddr, sizeof(servaddr)) < ){
perror("bind error");
exit(EXIT_FAILURE);
}
server(sock);
return ;
}

client端

#include <unistd.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h> void client(int sock){
//2、设置客户端socket参数
struct sockaddr_in servaddr;
memset(&servaddr, , sizeof(servaddr));
//3、设置传输协议、端口以及目的地址
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons();
servaddr.sin_addr.s_addr = inet_addr("127.0.0.1"); //4、创建发送与接收缓存字节数组
int ret;
char sendbuf[] = {};
char recvbuf[] = {};
//5、开始发送数据(此处是发送来自标准输入的数据)
while(fgets(sendbuf, sizeof(sendbuf), stdin) != NULL){
sendto(sock, sendbuf, strlen(sendbuf), , (struct sockaddr *)&servaddr, sizeof(servaddr));
//6、开始接收数据,接收服务端返回的数据
ret = recvfrom(sock, recvbuf, sizeof(recvbuf), , NULL, NULL);
if(ret == -){
perror("recvfrom");
exit(EXIT_FAILURE);
} //fputs(recvbuf, stdout); //将服务端返回的数据写入到标准输出 //7、清空发送与接收缓存
memset(sendbuf, , sizeof(sendbuf));
memset(recvbuf, , sizeof(recvbuf));
}
//8、关闭socket流
close(sock);
} int main(void){
int sock;
//1.创建客户端的socket
if((sock = socket(PF_INET, SOCK_DGRAM, )) < ){
perror("socket");
exit(EXIT_FAILURE);
}
client(sock);
return ;
}

参考:http://www.cnblogs.com/skyfsm/p/6287787.html?utm_source=itdadao&utm_medium=referral

http://blog.csdn.net/chenlycly/article/details/51582257

udp编程 实例的更多相关文章

  1. python udp编程实例

    与python tcp编程控制见 http://blog.csdn.net/aspnet_lyc/article/details/39854569 c++ udp/tcp 编程见 http://blo ...

  2. 【网络编程1】网络编程基础-TCP、UDP编程

    网络基础知识 网络模型知识 OSI七层模型:(Open Systems Interconnection Reference Model)开放式通信系统互联参考模型,是国际标准化组织(ISO)提出的一个 ...

  3. 牛客网Java刷题知识点之TCP、UDP、TCP和UDP的区别、socket、TCP编程的客户端一般步骤、TCP编程的服务器端一般步骤、UDP编程的客户端一般步骤、UDP编程的服务器端一般步骤

    福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑         Java全栈大联盟   ...

  4. 62 网络编程(三)——UDP编程

    UDP编程标准步骤 服务器端 使用DatagramSocket创建服务端:DatagramSocket server = new DatagramSocket(port);//参数为自定义端口号 准备 ...

  5. PHP多进程编程实例

    这篇文章主要介绍了PHP多进程编程实例,本文讲解的是在Linux下实现PHP多进程编程,需要的朋友可以参考下 羡慕火影忍者里鸣人的影分身么?没错,PHP程序是可以开动影分身的!想完成任务,又觉得一个进 ...

  6. c#摄像头编程实例 (转)

    c#摄像头编程实例 摄像头编程 安装摄像头后,一般可以找到一个avicap32.dll文件 这是一个关于设想头的类 using  system;using  System.Runtime.Intero ...

  7. Linux学习四:UDP编程(上)

    关于UDP和TCP对比优缺,这里就不说了. 使用UDP代码所掉用的函数和用于TCP的函数非常类似,这主要因为套接口库在底层的TCP和UDP的函数上加了一层抽象,通过这层抽象使得编程更容易,但失去了一些 ...

  8. JAX-RS 2.0 REST客户端编程实例

    JAX-RS 2.0 REST客户端编程实例 2014/01/28 | 分类: 基础技术, 教程 | 0 条评论 | 标签: JAX-RS, RESTFUL 分享到:3 本文由 ImportNew - ...

  9. Android studio 下JNI编程实例并生成so库

    Android studio 下JNI编程实例并生成so库 因为公司需要为Android相机做美颜等图像后期处理,需要使用JNI编程,最近学了下JNI,并且在Android Studio下实现了一个小 ...

随机推荐

  1. Python解决乱码问题

    解决python乱码问题 字符串在python的内部采用unicode的编码方式,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode ...

  2. Mac下安装m2crypto 解决找不到openssl头文件的错误

    直接复制整段到终端运行 sudo env LDFLAGS="-L$(brew --prefix openssl)/lib" CFLAGS="-I$(brew --pref ...

  3. cocos2dx - JS - 碰撞检测

    碰撞检测是游戏的一个重要组成部分,我们这里使用一种最简单的方法,就是获取精灵的矩形碰撞框.当然圆形的碰撞检测也比较简单,其他形状就复杂多了.首先是如何获取矩形碰撞框:var hBox=this.her ...

  4. Bukkit编程之动态向yml文件中添加属性

    yaml = new Yaml(); String goods = args[0]; String goodsNum = args[1]; YamlConfiguration yc = new Yam ...

  5. VS2013打包程序步骤

    VS自带的打包程序默认是没有安装的,如果有打包的需要,需要自己去下载一个安装程序  1.右击解决方案,选择添加项目,在打开的对话框中找到[已安装]-[模板]-[其他项目]-[安装和部署],如图示.第一 ...

  6. 动态创建 Plist 文件

    简介 Property List,属性列表文件,它是一种用来存储串行化后的对象的文件.属性列表文件的扩展名为.plist ,因此通常被称为 plist文件,文件是xml格式的. 写入plist文件 在 ...

  7. Web处理方式

    ProcessRequest 方法简称 PR方法 PR方法内部调用Page_Load方法   MVC设计模式 Model是指要处理的业务代码和数据操作代码 View视图主要是指的跟用户打交道并能够展示 ...

  8. 大数据处理框架之Strom:容错机制

    1.集群节点宕机Nimbus服务器 单点故障,大部分时间是闲置的,在supervisor挂掉时会影响,所以宕机影响不大,重启即可非Nimbus服务器 故障时,该节点上所有Task任务都会超时,Nimb ...

  9. 用python进行wifi密码生成

    随着无线网络的不断发展,几乎所有场合都会覆盖WIFI信号,无论是公共地点还是家庭之中.众所周知,目前WIFI普遍的认证方式为wpa2,这种认证方式安全性相当不错,但由于人们设置密码时的随意性和固有思维 ...

  10. ResourceBundle与Properties读取配置文件

    ResourceBundle与Properties的区别在于ResourceBundle通常是用于国际化的属性配置文件读取,Properties则是一般的属性配置文件读取. ResourceBundl ...