linux系统编程-SOCKET通信基础编程(0)-UDP编程

 

linux系统编程-SOCKET通信基础编程(0)-UDP编程

linux系统编程-SOCKET通信基础编程(1)-UDP编程服务端程序

linux系统编程-SOCKET通信基础编程(2)-UDP编程客户端程序

 

1.UDP简介

UDP是一种基于IP协议,(1)无连接的,(2)不保证可靠(3)数据报传输协议。

无连接:通信双方在传输数据之前不需要建立连接。(也可以选择连接connect)

不保证可靠:不保证接收的数据包顺序与发送的数据包顺序一致,也不能够发送的内容与接收到的内容一致。

数据报:数据是分包的,有头有尾。发送一次接收方需要接收一次,这样UDP则就是有边界的数据包,而TCP数据则是连续的。发送一次,接收方需要接收一次。

2.UDP基本程序介绍

3.服务器端创建流程

3.1创建socket

int socket(int domain, int type, int protocol);
int sock_server = socket(AF_INET, SOCK_DGRAM, 0);   //注意这里使用的是:SOCK_DGRAM (数据报套接字)

3.2填充IP地址

struct sockaddr_in server_addr;
bzero(&server_addr, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(SERVER_PORT);
server_addr.sin_addr.s_addr = INADDR_ANY;

3.3绑定IP地址

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
bind(sock_server, (struct sockaddr *)&server_addr, sizeof(server_addr))

3.4开始接收客户端的消息

ssize_t  recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen);
ret = recvfrom(server_sock, buf, BUFLEN-1, 0, (struct sockaddr*)&client_addr, &len)

3.5向客户端发送消息

sendto(sockfd, buf, len, flags, NULL, 0);
ret1 = sendto(server_sock, buf,strlen(buf),  0, (const struct sockaddr * )&client_addr, len);

3.6关闭scoket

scoekt()

4客户端创建流程

4.1创建socket

int socket(int domain, int type, int protocol);
int cli_sock = socket(AF_INET, SOCK_DGRAM, 0); //SOCK_DGRAM (数据报套接字)

4.2填充IP地址

struct sockaddr_in cli_addr;
bzero(&cli_addr, sizeof(cli_addr));
cli_addr.sin_family = AF_INET;
cli_addr.sin_port = htons(CLIENT_PORT);
cli_addr.sin_addr.s_addr = INADDR_ANY;

4.3绑定IP地址(可选:可以设置自己的端口号)

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
bind(cli_sock, (struct sockaddr *)&cli_addr, sizeof(cli_addr)

4.4链接(可选)

(可选:UDP链接并不是TCP的那样会有三次握手,而是简单的建立关系,可以使用send和write函数)
可多次调用链接connect  而TCP只能链接一次。

4.5向服务端发送消息

sendto(sockfd, buf, len, flags, NULL, 0);
ret = sendto(cli_sock, buf, strlen(buf), 0, (struct sockaddr *)&server_addr, socklen))

4.6向客户端发送消息

ssize_t  recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen);
ret = recvfrom(cli_sock, buf, BUFLEN, 0, (struct sockaddr *)&server_addr, &socklen);

4.7关闭socket

close();

附加设置地址复用

附加设置地址复用
int on = 1;
if(setsockopt(sock_server, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) == -1)
{
	perror("setsockopt");
	return -1;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
内容简介回到顶部↑ 本书是专为在UNIX平台下用C语言编制程序的人写的。是以POSIX为标准,主要以C语言为基础,详细介绍了UNIX平台下编写各种应用程序的范例和方法。全书分四个部分,共十五章。本书范例丰富,且具有代表性,如Socket编程、客户/服务端编程、多线程开发、CGI编程、X Windows下的Motif编程等。读者直接或只需稍作修改就可以将它们应用到自己的应用程序开发中。这些范例的源代码可以从配套光盘的电子书中直接拷贝使用。 目录回到顶部↑ 第一部分 基本的系统调用 第1章 文件子系统 1.1 文件子系统的基本概念 1.2 基本的文件输入和输出 1.3 高级的文件操作 第2章 终端操作 2.1 终端的基本概念 2.2 终端输入和输出 2.3 ioctl系统调用 第3章 进程及进程间通信 3.1 进程的基本概念 3.2 进程的一般操作 3.3 进程的特殊操作 3.4 进程间使用管道通信 第4章 信号 4.1 信号的基本概念 4.2 信号机制 4.3 有关信号的系统调用 第5章 部分其他调用 5.1 系统调用 .5.2 相关函数 第二部分 网络编程 第6章 Socket编程基础 6.1 TCP/IP基础知识 6.2 Socket一般描述 6.3 Socket中的主要调用 6.4 Socket的原始方式 第7章 客户/服务器编程 7.1 客户端程序设计 7.2 服务器端程序设计 7.3 服务端程序结构 7.4 多协议(TCP、UDP)服务端 7.5 客户端的并发程序设计 7.6 使用telnet协议的客户端例子 第8章 线程 8.1 有关线程的基本概念 8.2 线程的创建和终止 8.3 线程控制调用 8.4 线程之间的互斥 8.5 线程之间的同步 8.6 线程特定数据区的函数调用 8.7 一个使用线程的客户端并发的例子 8.8 有关线程的函数列表 第9章 CGl编程 9.1 CGI程序的基本概念 9.2 CGI基本编程 9.3 使用脚本语言编写CGl 9.4 Perl语言简介 9.5 一个简单的CGI例子 第三部分 X Window应用程序开发 第10章 X Window和Motif基础 10.1 简介 10.2 XWindow基本概念 10.3 启动Motif窗口管理器 10.4 设置Motif特性 10.5 Widget 第11章 Motif编程 11.1 基本编程概念 11.2 Widget资源 11.3 Motif编程基础 11.4 程序框架 11.5 "HelloWorld!"示例 11.6 管理器 11.7 按钮 11.8 X事件 11.9 其他Widget简介 11.10 菜单 11.11 对话框 第12章 Widget与X事件汇总 12.1 Widget 12.2 X事件 第四部分 常用的编程工具 第13章 编译器及调试工具 13.1 编译器用法入门 13.2 调试器使用入门 13.3 关于库的简介 第14章 Make工具及makefile规则 14.1 概述 14.2 make和makefile的关系 14.3 makefile规则 14.4 伪指令 14.5 make命令行参数 第15章 版本控制 15.1 版本控制概念 15.2 源代码控制系统SCCS 15.3 RCS使用方法 15.4 并发版本控制CVS

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值