API SOCKET基础(二) UDP通信

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函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值