【winsock2】windows网络编程 之 UDP/IP
2014-02-19 20:16
441 查看
说道UDP,大家自然先想到TCP,那我们就先来比较比较着两种的特性!
UDP类型是数据报套接字(SOCK_DGRAM);
服务器的启动流程:socket --> bind -- > sendto/recvform --> closesocket
客户端的启动流程:socket --> sendto/recvfrom --> closesocket
这样看,UDP通信其实比较简单!
#pragma comment(lib,"ws2_32.lib")
WSADATA
wsa_data;
int
ret = 0;
ret = WSAStartup(MAKEWORD(2,2),&wsa_data);
//初始化正确返回0
server_addr;
SOCKET
fd_socket;
fd_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
//出错则返回 INVALID_SOCKET
//服务器配置
int port = 3200;
//端口号
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(port);//端口号范围: 0 ~65535
server_addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//INADDR_ANY意思是接受所有IP的连接
ret = bind(fd_socket,(SOCKADDR *)&server_addr,sizeof(SOCKADDR)); //绑定ip域socket,出错返回SOCKET_ERROR
client;
int
client_len = 0;
char buff[1024];
memset(buff,0x0,1024);
ret = recvfrom(fd_socket,buff,1024,0,(SOCKADDR *)&client,&client_len);
memset(send_buff,0x0,512);
ret = sendto(fd_socket,send_buff,strlen(send_buff),0,(SOCKADDR *)&client,client_len);
WSACleanup();
#pragma comment(lib,"ws2_32.lib")
WSADATA
wsa_data;
int
ret = 0;
ret = WSAStartup(MAKEWORD(2,2),&wsa_data);
//初始化正确返回0
server_addr;
SOCKET
fd_socket;
fd_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
//出错则返回 INVALID_SOCKET
//服务器配置
int port = 3200;
//端口号
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(port);//端口号范围: 0 ~65535
server_addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
server_len = 0;
char buff[1024];
memset(buff,0x0,1024);
ret = recvfrom(fd_socket,buff,1024,0,(SOCKADDR *)&server_addr,&server_len);
memset(send_buff,0x0,512);
ret = sendto(fd_socket,send_buff,strlen(send_buff),0,(SOCKADDR *)&server_addr,server_len);
WSACleanup();
请大家多多指教!
TCP | UDP | |
应用场合 | 传输数据量大 | 传输数据量小 |
传输速度 | 慢 | 快 |
传输可靠性 | 可靠 | 不可靠 |
连接性 | 面向连接 | 无连接 |
服务器的启动流程:socket --> bind -- > sendto/recvform --> closesocket
客户端的启动流程:socket --> sendto/recvfrom --> closesocket
这样看,UDP通信其实比较简单!
服务器
1、套接字初始化
#include <WinSock2.h>#pragma comment(lib,"ws2_32.lib")
WSADATA
wsa_data;
int
ret = 0;
ret = WSAStartup(MAKEWORD(2,2),&wsa_data);
//初始化正确返回0
2、创建UDP套件字
SOCKADDR_INserver_addr;
SOCKET
fd_socket;
fd_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
//出错则返回 INVALID_SOCKET
3、绑定套接字与IP
SOCKADDR_INserver_addr;//服务器配置
int port = 3200;
//端口号
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(port);//端口号范围: 0 ~65535
server_addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//INADDR_ANY意思是接受所有IP的连接
ret = bind(fd_socket,(SOCKADDR *)&server_addr,sizeof(SOCKADDR)); //绑定ip域socket,出错返回SOCKET_ERROR
4、接收数据
SOCKADDR_INclient;
int
client_len = 0;
char buff[1024];
memset(buff,0x0,1024);
ret = recvfrom(fd_socket,buff,1024,0,(SOCKADDR *)&client,&client_len);
5、发送数据
char send_buff[512];memset(send_buff,0x0,512);
ret = sendto(fd_socket,send_buff,strlen(send_buff),0,(SOCKADDR *)&client,client_len);
6、关闭服务器
closesocket(fd_socket);WSACleanup();
客户端
有上面的流程可以看出,UDP的客户端与服务器只是少了一个绑定操作!1、套接字初始化
#include <WinSock2.h>#pragma comment(lib,"ws2_32.lib")
WSADATA
wsa_data;
int
ret = 0;
ret = WSAStartup(MAKEWORD(2,2),&wsa_data);
//初始化正确返回0
2、创建UDP套件字
SOCKADDR_INserver_addr;
SOCKET
fd_socket;
fd_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
//出错则返回 INVALID_SOCKET
3、要连接的服务器配置
SOCKADDR_IN server_addr;//服务器配置
int port = 3200;
//端口号
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(port);//端口号范围: 0 ~65535
server_addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
4、接收数据
intserver_len = 0;
char buff[1024];
memset(buff,0x0,1024);
ret = recvfrom(fd_socket,buff,1024,0,(SOCKADDR *)&server_addr,&server_len);
5、发送数据
char send_buff[512];memset(send_buff,0x0,512);
ret = sendto(fd_socket,send_buff,strlen(send_buff),0,(SOCKADDR *)&server_addr,server_len);
6、关闭服务器
closesocket(fd_socket);WSACleanup();
请大家多多指教!
相关文章推荐
- 【winsock2】windows网络编程 之 TCP/IP Server
- 【winsock2】windows网络编程 之 TCP/IP Client
- android 网络编程--socket tcp/ip udp http之间的关系
- android 网络编程--socket tcp/ip udp http之间的关系
- 三十天学不会TCP,UDP/IP网络编程-UDP,从简单的开始
- Lesson_for_java_day22--java的网络编程(IP、URL、UDP传输)
- android 网络编程--socket tcp/ip udp http之间的关系
- 网络编程基础(1)-协议概要-IP、ICMP、UDP
- WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现
- android 网络编程--socket tcp/ip udp http之间的关系
- 三十天学不会TCP,UDP/IP网络编程 - UDP的实践--DHCP
- WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现
- (转)iOS 各种网络编程总结--进程、线程、Socket、HTTP、TCP/IP、TCP和UDP
- 第23天 网络编程、udp、tcp,ip
- WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现
- 三十天学不会TCP,UDP/IP网络编程-TraceRoute的哲学
- Android 网络编程--socket tcp/ip udp http之间的关系
- windows下UDP、TCP网络编程
- 网络编程之---TCP/IP UDP总结
- 基于UDP的windows网络Socket编程