API SOCKET基础(二) UDP通信
2012-05-09 15:45
190 查看
UDP是不面向连接的通信,通信过程如下:
首先链接导入库文件,包含头文件,加载套接字库。
服务端:
SOCKET sockSrv=socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
客户端:
SOCKET sockClient=socket(AF_INET,SOCK_DGRAM,0);
发送和接收数据:
int sendto(
SOCKET s, //发送数据的socket
const char FAR *buf, //要发送数据的buf地址
int len, //要发送数据的buf长度
int flags, //一般设置为0
const struct sockaddr FAR *to, //目的地址结构体指针
int tolen //地址结构体长度
);
int recvfrom(
SOCKET s, //接收数据socket
char FAR* buf, //保存接收数据的buf地址
int len, //保存接收数据的buf长度
int flags, //一般设置为0
struct sockaddr FAR *from, //地址结构体指针,用来保存数据发送端地址信息
int FAR *fromlen //地址结构体长度
);
服务端socket必须绑定IP端口,这样客户端socket才能知道服务端socket的IP端口从而向服务端socket发送数据。
char IPaddr[16]="127.0.0.1";
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr(IPaddr);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
int len=sizeof(SOCKADDR);
sendto(sockClient,"data to send",strlen("data to send")+1,0,(SOCKADDR*)&addrSrv,len);
客户端socket不需要绑定IP端口,而让系统随机绑定一个端口。因为服务端socket永远不会先发数据给客户端socket,而在服务端socket recvfrom客户端发来的数据时,recvfrom函数里就有参数能保存发数据来的客户端socket的地址信息。
char pathBuf[100];
SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
recvfrom(sockSrv,pathBuf,100,0,(SOCKADDR*)&addrClient,&len);
socket使用完毕后调用closesocket()函数关闭一个socket以回收资源。在程序关闭之前调用WSACleanup函数终止对套接字库的使用,注意必须在App类(应用程序类)的析构函数中调用WSACleanup函数。
首先链接导入库文件,包含头文件,加载套接字库。
服务端:
SOCKET sockSrv=socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
客户端:
SOCKET sockClient=socket(AF_INET,SOCK_DGRAM,0);
发送和接收数据:
int sendto(
SOCKET s, //发送数据的socket
const char FAR *buf, //要发送数据的buf地址
int len, //要发送数据的buf长度
int flags, //一般设置为0
const struct sockaddr FAR *to, //目的地址结构体指针
int tolen //地址结构体长度
);
int recvfrom(
SOCKET s, //接收数据socket
char FAR* buf, //保存接收数据的buf地址
int len, //保存接收数据的buf长度
int flags, //一般设置为0
struct sockaddr FAR *from, //地址结构体指针,用来保存数据发送端地址信息
int FAR *fromlen //地址结构体长度
);
服务端socket必须绑定IP端口,这样客户端socket才能知道服务端socket的IP端口从而向服务端socket发送数据。
char IPaddr[16]="127.0.0.1";
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr(IPaddr);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
int len=sizeof(SOCKADDR);
sendto(sockClient,"data to send",strlen("data to send")+1,0,(SOCKADDR*)&addrSrv,len);
客户端socket不需要绑定IP端口,而让系统随机绑定一个端口。因为服务端socket永远不会先发数据给客户端socket,而在服务端socket recvfrom客户端发来的数据时,recvfrom函数里就有参数能保存发数据来的客户端socket的地址信息。
char pathBuf[100];
SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
recvfrom(sockSrv,pathBuf,100,0,(SOCKADDR*)&addrClient,&len);
socket使用完毕后调用closesocket()函数关闭一个socket以回收资源。在程序关闭之前调用WSACleanup函数终止对套接字库的使用,注意必须在App类(应用程序类)的析构函数中调用WSACleanup函数。
相关文章推荐
- Socket网络通信理论基础搜集(TCP/IP协议栈与数据包封装+TCP与UDP的区别)
- Socket网络通信理论基础搜集(TCP/IP协议栈与数据包封装+TCP与UDP的区别)
- Socket网络通信理论基础搜集(TCP/IP协议栈与数据包封装+TCP与UDP的区别)
- java网络编程基础——UDP通信之DatagramSocket
- python基础-socket初识、udp通信、udp数据报协议
- [摘抄-Socket-学习中]UDP通信基础代码-server端
- API SOCKET基础(一) TCP建立连接并通信
- 26 API-网络编程(网络概述,Socket通信机制,UDP协议发送和接收数据,TCP协议发送和接收数据)
- API SOCKET基础(一) TCP建立连接并通信
- API SOCKET基础(一) TCP建立连接并通信
- Linux网络通信(二)Socket编写TCP/UDP
- 网络通信Socket编程基础
- C# SOCKET UDP通信实例
- 广播是建立于UDP基础上的,所以创建socket必须指定SOCK_DGRAM。
- Linux下socket编程基础——socket地址API
- C#UDP入门|Socket通信|UdpClient通信
- QT基础(八)----TCP通信 & UDP通信
- Socket,TCP,UDP,HTTP基本通信原理和OC版本Demo
- Java 基于 UDP 实现 Socket中的多客户端通信
- socket通信基础