【winsock2】windows网络编程 之 UDP/IP

说道UDP,大家自然先想到TCP,那我们就先来比较比较着两种的特性!

  TCP UDP
应用场合 传输数据量大 传输数据量小
传输速度
传输可靠性 可靠 不可靠
连接性 面向连接 无连接


UDP类型是数据报套接字(SOCK_DGRAM);

服务器的启动流程: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_IN server_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_IN client;

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_IN server_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、接收数据

int server_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();


请大家多多指教!

你可能感兴趣的:(windows,Socket网络编程)