linux网络通信-------UDP协议
2017-06-21 22:50
225 查看
UDP编程模型
UDP协议是长度固定的,无连接的不可靠报文传递,所以不像TCP协议那样需要在发送数据之前先建立连接
服务器
创建socket socket
绑定地址 bind
接收数据 recvfrom
发送数据 sendto
结束连接 close
客户机
创建socket socket
发送数据 sendto
接收数据 recvfrom
结束连接 close
UDP服务器
#include
#include
#include
#include
#define PORT 8888
#define MSG_SIZE 128
void main()
{
int sockfd;
struct sockaddr_in
server_addr;
struct sockaddr_in
client_addr;
char
buffer[MSG_SIZE];
int addrlen;
int n;
//创建socket
sockfd = socket(AF_INET,
SOCK_DGRAM, 0);
//绑定地址
bzero(&server_addr,
sizeof(struct sockaddr_in));
server_addr.sin_family =
AF_INET;
server_addr.sin_port =
htons(PORT);
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
bind(sockfd, (struct
sockaddr *)(&server_addr), sizeof(struct sockaddr));
//接受数据
while(1)
{
addrlen = sizeof(struct
sockaddr);
bzero(buffer,
sizeof(buffer));
n = recvfrom(sockfd,
buffer, MSG_SIZE, 0, (struct sockaddr *)(&client_addr),
&addrlen);
buffer
= 0;
printf("server received
:%s\n", buffer);
}
//结束连接
close(sockfd);
}
UDP客户端
#include
#include
#include
#include
#define BUF_SIZE 128
#define PORT 8888
void main(int argc, char **argv)
{
int sockfd;
char
buffer[BUF_SIZE];
struct sockaddr_in
server_addr;
if(argc != 2)
{
printf("Useage: %s
server_ip\n", argv[0]);
exit(1);
}
//创建套接字
sockfd = socket(AF_INET,
SOCK_DGRAM, 0);
//初始化服务器地址
bzero(&server_addr,
sizeof(struct sockaddr_in));
server_addr.sin_family =
AF_INET;
server_addr.sin_port =
htons(PORT);
inet_aton(argv[1],
&server_addr.sin_addr);
//发送数据
while(1)
{
printf("please input
char:\n");
fgets(buffer, BUF_SIZE,
stdin);
sendto(sockfd, buffer, strlen(buffer), 0,
(struct sockaddr *)(&server_addr), sizeof(struct
sockaddr));
4000
bzero(buffer, BUF_SIZE);
}
//关闭连接
close(sockfd);
}
UDP协议是长度固定的,无连接的不可靠报文传递,所以不像TCP协议那样需要在发送数据之前先建立连接
服务器
创建socket socket
绑定地址 bind
接收数据 recvfrom
发送数据 sendto
结束连接 close
客户机
创建socket socket
发送数据 sendto
接收数据 recvfrom
结束连接 close
UDP服务器
#include
#include
#include
#include
#define PORT 8888
#define MSG_SIZE 128
void main()
{
int sockfd;
struct sockaddr_in
server_addr;
struct sockaddr_in
client_addr;
char
buffer[MSG_SIZE];
int addrlen;
int n;
//创建socket
sockfd = socket(AF_INET,
SOCK_DGRAM, 0);
//绑定地址
bzero(&server_addr,
sizeof(struct sockaddr_in));
server_addr.sin_family =
AF_INET;
server_addr.sin_port =
htons(PORT);
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
bind(sockfd, (struct
sockaddr *)(&server_addr), sizeof(struct sockaddr));
//接受数据
while(1)
{
addrlen = sizeof(struct
sockaddr);
bzero(buffer,
sizeof(buffer));
n = recvfrom(sockfd,
buffer, MSG_SIZE, 0, (struct sockaddr *)(&client_addr),
&addrlen);
buffer
= 0;
printf("server received
:%s\n", buffer);
}
//结束连接
close(sockfd);
}
UDP客户端
#include
#include
#include
#include
#define BUF_SIZE 128
#define PORT 8888
void main(int argc, char **argv)
{
int sockfd;
char
buffer[BUF_SIZE];
struct sockaddr_in
server_addr;
if(argc != 2)
{
printf("Useage: %s
server_ip\n", argv[0]);
exit(1);
}
//创建套接字
sockfd = socket(AF_INET,
SOCK_DGRAM, 0);
//初始化服务器地址
bzero(&server_addr,
sizeof(struct sockaddr_in));
server_addr.sin_family =
AF_INET;
server_addr.sin_port =
htons(PORT);
inet_aton(argv[1],
&server_addr.sin_addr);
//发送数据
while(1)
{
printf("please input
char:\n");
fgets(buffer, BUF_SIZE,
stdin);
sendto(sockfd, buffer, strlen(buffer), 0,
(struct sockaddr *)(&server_addr), sizeof(struct
sockaddr));
4000
bzero(buffer, BUF_SIZE);
}
//关闭连接
close(sockfd);
}
相关文章推荐
- linux 网络编程:客户端与服务器通过TCP协议相互通信 + UDP
- Linux网络通信实例(TCP和UDP)
- linux 网络编程:客户端与服务器通过TCP协议相互通信 + UDP
- Linux网络通信(二)Socket编写TCP/UDP
- Java学习系列(十八)Java面向对象之基于UDP协议的网络通信
- 通过套接字(socket)和UDP协议实现网络通信
- 基于linux简单的UDP网络通信代码
- linux网络编程之socket(十四):基于UDP协议的网络程序
- Java学习系列(十八)Java面向对象之基于UDP协议的网络通信
- 通过套接字(socket)和UDP协议实现网络通信
- 基于LINUX系统的SOCKET通信,使用UDP协议.
- linux网络编程之socket(十四):基于UDP协议的网络程序
- linux下udp 网络间通信程序+书上没有提过的问题自己想法
- 疯狂java UDP协议的网络通信
- Linux下基于UDP协议的C/S通信编程笔记
- 在linux网络UDP通信中,关于客户端是否绑定的理解
- [Linux网络编程笔记]传输协议TCP和UDP简介
- UDP: 用Socket 实现UDP 协议下的网络通信
- Java学习系列(十八)Java面向对象之基于UDP协议的网络通信
- 记录:网络通信协议中的TCP/IP与UDP