socket之无连接编程(UDP)
来源:互联网 发布:java零基础到项目实战 编辑:程序博客网 时间:2024/06/06 09:54
UDP是无连接不可靠的数据报协议,UDP的常见应用程序是DNS(域名解析系统),NFS(网络文件系统),SNMP(简单网络管理协议);
在使用UDP的客户服务器程序中,客户不与服务器建立连接,而是只管使用sendto函数给服务器发送数据报,其中必须指出目标服务器的地址;同样,服务器不接受来自客户的连接,而只是用recvfrom等待指定用户的数据到达,recvfrom将与所接收的数据报一起返回客户的协议地址,因此服务器可以把响应发送给正确的客户!!!!
注意:在UDP服务中,必须先由客户发送数据给服务器,这样服务器才会知道自己在为哪个客户服务
编写UDP无连接的客户服务器套接字流程如下:
以下是一个UDP实现的客户服务器发送数据报的简单例子:
//服务器端的代码#include <iostream>#include <unistd.h>#include <stdio.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <string.h>#define SERVER_PORT 7070#define SERVER_IP "192.168.3.66"int main(int ac, char *av[]){ int sockser = socket(AF_INET, SOCK_DGRAM, 0); //创建服务器端的套接字 if(sockser == -1){ perror("socket"); } //设置地址重用 int y=1; setsockopt(sockser, SOL_SOCKET, SO_REUSEADDR, &y, sizeof(int)); struct sockaddr_in addrser, addrcli; //客户服务器的地址结构体 addrser.sin_family = AF_INET; //设置服务器端的协议家族 addrser.sin_port = htons(SERVER_PORT); //设置服务器的端口号 addrser.sin_addr.s_addr = inet_addr(SERVER_IP); //设置服务器的IP地址 socklen_t addrlen = sizeof(struct sockaddr); //得到客户服务器的地址长度 int res = bind(sockser, (struct sockaddr*)&addrser, addrlen); //绑定服务器的地址信息 if(res == -1){ perror("bind"); } char sendbuf[256]; char recvbuf[256]; printf("wait cli connect.......\n"); //收发数据进行服务 while(1){ recvfrom(sockser, recvbuf, 256, 0, (struct sockaddr*)&addrcli, &addrlen); //接收来自目标客户的数据报 printf("cli:>%s\n", recvbuf); printf("Ser:>"); scanf("%s", sendbuf); if(strncmp(sendbuf, "quit", 4) == 0){ sendto(sockser, sendbuf, strlen(sendbuf) + 1, 0, (struct sockaddr*)&addrcli, addrlen); //给目标客户发送数据报 break; } sendto(sockser, sendbuf, strlen(sendbuf) + 1, 0, (struct sockaddr*)&addrcli, addrlen); } close(sockser); //关闭服务器的套接字 return 0;}//客户端的代码#include <iostream>#include <unistd.h>#include <stdio.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <string.h>#define SERVER_PORT 7070#define SERVER_IP "192.168.3.66"int main(int ac, char *av[]){ int sockcli = socket(AF_INET, SOCK_DGRAM, 0); //得到客户端的套接字 if(sockcli == -1){ perror("socket"); } struct sockaddr_in addrser; //服务器端的地址结构体 addrser.sin_family = AF_INET; //设置服务器的地址协议家族 addrser.sin_port = htons(SERVER_PORT); //设置服务器的端口号 addrser.sin_addr.s_addr = inet_addr(SERVER_IP); //设置服务器的IP地址 socklen_t addrlen = sizeof(struct sockaddr); //得到服务器的地址长度 char sendbuf[256]; char recvbuf[256]; printf("cli connect ser ok.\n"); //收发数据 while(1){ printf("Cli:>"); scanf("%s", sendbuf); if(strncmp(sendbuf, "quit", 4) == 0){ sendto(sockcli, sendbuf, strlen(sendbuf) + 1, 0, (struct sockaddr*)&addrser, addrlen); //客户端首先发送数据报,为了让服务器确认通信的客户 break; } sendto(sockcli, sendbuf, strlen(sendbuf) + 1, 0, (struct sockaddr*)&addrser, addrlen); recvfrom(sockcli, recvbuf, 256, 0, (struct sockaddr*)&addrser, &addrlen); //客户端接收来自服务器的数据报 printf("Ser:>%s\n", recvbuf); } close(sockcli); //关闭客户端套接字 return 0;}
0 0
- socket之无连接编程(UDP)
- 基于UDP(面向无连接)的socket编程
- UDP(面向无连接)的socket编程
- 基于UDP(面向无连接)的socket编程
- 基于UDP(面向无连接)的socket编程
- Socket编程基础——无连接UDP
- Socket UDP无连接通信
- 网络编程Socket之UDP(二)面向“连接”的UDP
- 无连接的服务器编程(UDP)
- 基于 TCP (面向连接)和无连接UDP协议的 socket 套接字编程
- UDP无连接的Socket通信
- android 之 socket编程(TCP&UDP)
- linux网络编程之socket(UDP)
- java-----Socket编程之UDP
- C# Socket编程之UDP
- Linux 编程之 【socket】 udp
- 十、Socket之UDP编程
- socket编程之udp发送 .
- 虚拟机3中网络模式
- Android客户端与服务器交互中的token
- Android 热补丁动态修复框架小结
- 数据挖掘导论 (三)
- leetcode 24. Swap Nodes in Pairs
- socket之无连接编程(UDP)
- DB2 SQLCODE
- C++启动外部程序
- 【Sicily】1035. DNA matching
- 【办公-WORD】vba 统一改变word文档所有的图片大小 然后导出成PDF
- RNN以及LSTM的介绍和公式梳理
- 好的评论记录
- dataGridView 绑定SQL数据
- 基于Cordys BOP 4 维护开发代码实践经验