基于UDP的编程
前提:基于Linux系统的学习
服务器端编程模型
1 socket(2) 创建通讯端点,返回一个文件描述符fd
2 bind(2) 将fd绑定到本地的地址和端口
while(1){
阻塞等待客户端请求数据的到来 recvfrom(2)
业务处理
将处理结果发送给客户端sendto(2)
}
#include <stdio.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <string.h>
#include <arpa/inet.h> int main(){
char IP[];
char buf[];
struct sockaddr_in serv;
struct sockaddr_in clie;
socklen_t clie_len;
//创建socket通讯端口,fd
int fd=socket(AF_INET,SOCK_DGRAM,);
if(fd==-){
perror("socket");
return -;
}
//初始化serv的成员
serv.sin_family=AF_INET;
serv.sin_port=htons();
serv.sin_addr.s_addr=htonl(INADDR_ANY);
//将fd绑定到服务器
int b=bind(fd,(struct sockaddr*)&serv,sizeof(serv));
if(b==-){
perror("bind");
return -;
}
while(){
clie_len=sizeof(clie);
//阻塞等待客户端的请求
ssize_t s=recvfrom(fd,&buf,,,(struct sockaddr*)&clie,&clie_len);
if(s==-){
perror("recvfrom");
return -;
} printf("%s\n", inet_ntop(AF_INET,&clie.sin_addr,IP,));
write(,buf,s);
strcpy(buf,"gunk you\n");
//将处理结果发送给客户端
sendto(fd,buf,strlen(buf),,(struct sockaddr*)&clie,sizeof(clie));
}
close(fd);
}
客户端编程模型
1 创建通讯端点,返回一个文件描述符fd
2 使用fd向服务器发送消息
3 阻塞等待服务器的响应消息
4 将得到的消息处理
5 关闭fd.
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <arpa/inet.h>
int main(){
char buf[];
struct sockaddr_in serv;
char* msg="hector client\n";
//创建通讯端口,fd
int fd=socket(AF_INET,SOCK_DGRAM,);
if(fd==-){
perror("socket");
return -;
}
//初始化serv的成员
serv.sin_family=AF_INET;
serv.sin_port=htons();
inet_pton(AF_INET,"127.0.0.1",&serv.sin_addr);
//使用fd向服务器发送消息
sendto(fd,msg,strlen(msg),,\
(struct sockaddr*)&serv,sizeof(serv));
//阻塞等待服务器的响应
ssize_t r=recvfrom(fd,buf,,,NULL,NULL);
if(r==-){
perror("recvfrom");
return -;
}
//将得到的消息处理
write(,buf,r);
//关闭fd
close(fd); return ;
}
基于UDP的编程的更多相关文章
- 基于UDP协议编程
基于udp套接字 udp是无链接的,先启动哪一端都不会报错. UDP(user datagram protocol,用户数据报协议)是无连接的,面向消息的,提供高效率服务.不会使用块的合并优化算法,, ...
- Java网络编程二--基于UDP的编程
DatagramSocket对象为基于UDP协议的Socket 构造器提供可以选择性绑定到指定端口和ip 创建完对象后调用:receive(DatagramPacket p) send(Dategra ...
- 网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程
Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服 ...
- Linux网络编程:基于UDP的程序开发回顾篇
基于无连接的UDP程序设计 同样,在开发基于UDP的应用程序时,其主要流程如下: 对于面向无连接的UDP应用程序在开发过程中服务端和客户端的操作流程基本差不多.对比面向连接的TCP程序,服务端少了 ...
- (1)基于tcp协议的编程模型 (2)tcp协议和udp协议的比较 (3)基于udp协议的编程模型 (4)反射机制
1.基于tcp协议的编程模型(重中之重)1.1 编程模型服务器: (1)创建ServerSocket类型的对象,并提供端口号: (2)等待客户端的连接请求,调用accept()方法: (3)使用输入输 ...
- 网络编程----socket介绍、基于tcp协议的套接字实现、基于udp协议的套接字实现
一.客户端/服务器架构(C/S架构) 即C/S架构,包括: 1.硬件C/S架构(打印机) 2.软件C/S架 ...
- 网络编程(基于udp协议的套接字/socketserver模块/进程简介)
一.基于UDP协议的套接字 TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据.相对TCP,UDP则是面向无连接的协议. 使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就 ...
- 20181225 基于TCP/IP和基于UDP/IP的套接字编程
一.TCP/IP的套接字编程 服务器端代码: import socketserver = socket.socket() # 默认是基于TCP# 基于TCP的对象serve=socket.sock ...
- TCP/IP网络编程之基于UDP的服务端/客户端
理解UDP 在之前学习TCP的过程中,我们还了解了TCP/IP协议栈.在四层TCP/IP模型中,传输层分为TCP和UDP这两种.数据交换过程可以分为通过TCP套接字完成的TCP方式和通过UDP套接字完 ...
随机推荐
- Git的使用(2) —— 本地版本库的操作
1. 向本地版本库中添加文件 注意:.git文件夹是本地版本库,包含.git文件夹的目录叫工作目录,要往本地版本库中添加文件,就必须将文件放在工作目录中. (1) 把文件添加到工作目录中. (2) 右 ...
- Leet Code 1.两数之和
给定一个整数nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标. 可以假设每种输入只会对应一个答案.但是,不能重复利用这个数组中同样的元素. 题解 提交代 ...
- Spring IOC是什么
IOC 什么是IOC IOC: Inversion of Control(控制反转) 控制反转:将对象的创建权反转给(交给)Spring. 传统开发模式 业务和实现类过于紧密,底层业务要修改源代码 通 ...
- https://zhuanlan.zhihu.com/p/32553477
科普:QUIC协议原理分析
- 单例模式:Java单例模式的几种写法及它们的优缺点
总结下Java单例模式的几种写法: 1. 饿汉式 public class Singleton { private static Singleton instance = new Singleton( ...
- linux内核中i2c驱动中slave模式接口的调用
1. 关注unreg_slave接口 1.1 这个接口在哪里被调用呢? 在drivers/i2c/i2c-core-slave.c中 int i2c_slave_unregister(struct i ...
- layuiadmin(iframe)常用问题集锦
1. 弹出窗口中传值给父层表单 table.on('tool(tableList)', function(obj){ var selected = obj.data; var layEvent = o ...
- 【转载】 linux dig 命令使用方法
原文地址: https://www.imooc.com/article/26971?block_id=tuijian_wz 作者:ibeautiful来源:慕课网 ------------------ ...
- Java二维数组的应用
package com.imooc; public class ArrayDemo5 { public static void main(String[] args) { //二维数组的声明和创建: ...
- linux配置docker报错:ImportError: No module named yum
如题,安装docker后配置仓库报错: [root@centos ~]# yum-config-manager --add-repo https://download.docker.com/linux ...