UDP是无连接的,在发送数据时需要指定对端的IP地址和端口,每次发送数据需要重新连接(多次发数据导致效率低下),而且异步错误不会返回到UDP套接字。这些在UDP调用connect函数之后都发生了改变。代码如下:

服务端:

#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <errno.h>
#include <malloc.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/ioctl.h>
#include <stdarg.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <signal.h>
#define MAXLINE 4096int main(int argc ,char *argv[])
{int sockfd,loop=1,ret;struct sockaddr_in seraddr;bzero(&seraddr,sizeof(seraddr));seraddr.sin_family=AF_INET;seraddr.sin_port=htons(8888);seraddr.sin_addr.s_addr=INADDR_ANY;sockfd=socket(AF_INET,SOCK_DGRAM,0);bind(sockfd,(sockaddr *)&seraddr,sizeof(seraddr));socklen_t len=sizeof(sockaddr);char buf[100]={0};recv(sockfd,buf,strlen(buf)-1,0);printf("buf=%s\n",buf);close(sockfd);
}

客户端:

#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <errno.h>
#include <malloc.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/ioctl.h>
#include <stdarg.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <signal.h>
#define MAXLINE 4096int main()
{int sockfd;struct sockaddr_in seraddr;sockfd=socket(AF_INET,SOCK_DGRAM,0);bzero(&seraddr,sizeof(seraddr));seraddr.sin_family=AF_INET;seraddr.sin_addr.s_addr=inet_addr("127.0.0.1");seraddr.sin_port=htons(8888);connect(sockfd,(struct sockaddr *)&seraddr,sizeof(seraddr));char buf[100]="123";send(sockfd,buf,sizeof(buf)+1,0);getchar();exit(0);
}

编译并运行,你会发现服务端有了打印。但是我们使用的是send和recv函数。

[mapan@localhost UDP]$ ./server
buf=123

至于UDP调用connect函数之后异步错误的返回,我这里不演示了。

UDP调用connect函数相关推荐

  1. UDP调用connect

    UDP调用connect函数之前写过了,用的一个编程实例简单说明了一下,今天再更深入的学习一下. 之前博文地址:https://blog.csdn.net/ma2595162349/article/d ...

  2. 网络编程学习笔记(UDP的connect函数)

    对于已连接的UDP套接口,发生了三个变化: 1.再也不能给输出操作指定目的IP地址和端口,也就是说,不能再调用 sendto,而使用send或者write.写到已连接UDP套接口上的任何东西都自动发送 ...

  3. udp协议连接函数ip4_datagram_connect

    udp协议是无连接函数,但也支持系统调用connect函数,调用connect的目的是建立到达目的地址的路由,并把路由保存到路由高速缓冲区中,接下来发送数据包时就可以使用路由高速缓冲区的信息,应用层表 ...

  4. connect函数介绍

    文章目录 1 connect函数介绍 2 connect在TCP应用出错的可能场景 1 connect函数介绍 #include <sys/types.h> /* See NOTES */ ...

  5. connect函数在阻塞和非阻塞模式下的行为

    connect函数在阻塞和非阻塞模式下的行为 当socket使用阻塞模式时,connect函数会阻塞到有明确结果才会返回,如果网络环境较差,可能要等一会,影响体验, 为了解决这个问题,我们使用异步co ...

  6. 网络编程socket之connect函数

    网络编程socket api存在一批核心接口,而这一批核心接口就是几个看似简单的函数,尽管实际上这些函数没有一个是简单.connect函数就是这些核心接口的一个函数,它完成主动连接的过程. conne ...

  7. Linux下connect函数 阻塞 与 非阻塞 问题

    一.概述 linux系统下,connect函数是阻塞的,阻塞时间的长度与系统相关.而如果把套接字设置成非阻塞,调用connect函数时会报错Operation now in progress,且err ...

  8. udp 使用connect优点_nodejs源码分析第十九章 -- udp模块

    udp不是面向连接的协议,所以使用上会比tcp简单,他和tcp一样,使用四元组来标记通信的双方(单播的情况下).我们看看udp作为服务器和客户端的时候的流程. 1 在c语言中使用udp 1.1 服务器 ...

  9. 如何在sqlite3连接中创建并调用自定义函数

    #!/user/bin/env python # @Time :2018/6/8 14:44 # @Author :PGIDYSQ #@File :CreateFunTest.py '''如何在sql ...

最新文章

  1. XML 序列化 【译】
  2. 回溯法模板(矩阵中操作)
  3. sqlserver compact sdf, sqlite 数据库 在net中相对路径设置方法 - 摘自网络
  4. jbutton 数组创建 java_java-将JButton数组添加到JPanel(按钮不可见)
  5. Leecode 136. 只出现一次的数字
  6. 2.4 Python 模块的使用安装导入
  7. 英世曼 | 动量是否具有行为性?
  8. 操作系统(OS)进程与调度
  9. python使用OpenCV-Python结合百度图像识别api实现图片中的文字识别
  10. DM适配Python
  11. 龙芯2F入手,点滴记录!
  12. PPT怎么母版怎么修改及应用
  13. MATLAB矩阵基础知识(二)
  14. Kai Ge - Q绑查询V1.3
  15. linux 视频壁纸,Plasma video wallpaper: KDE 4 视频壁纸
  16. 前端导出word图片
  17. 百度携手重庆渝中区,打造区块链大数据智能化应用示范城区
  18. dhcp、tftp及pxe简介
  19. OpenCV Java入门三 Mat的基本操作
  20. 平面几何--角平分线长定理

热门文章

  1. 【Netty】Netty 核心组件 ( ChannelPipeline 中的 ChannelHandlerContext 双向链表分析 )
  2. 基于IPV6的数据包分析
  3. Python学习day5作业
  4. 第二百五十天 how can I 坚持
  5. 程序人生之回顾大学前两年----第一篇
  6. Spring+MyBatis实践—中文乱码
  7. 如何修改git已提交记录的邮箱?
  8. 算法笔记-判断链表保存的字符串是否是回文
  9. 小米澄清传闻:不存在跨境转移利润及逃避缴纳税款行为
  10. REST API URI 设计的七准则