UDP会话单例(windows)

来源:互联网 发布:如何查询网络是否稳定 编辑:程序博客网 时间:2024/06/05 10:07

 服务端:
#include "stdafx.h"
#include <iostream>
using namespace std;
#include <WinSock2.h>
#pragma  comment(lib,"WS2_32.lib")
#define MAX_BUFFER 256
int _tmain(int argc, _TCHAR* argv[])
{
 WSADATA wsaData;
 WORD sockVersion = MAKEWORD(2,2);
 if(::WSAStartup(sockVersion,&wsaData))
  exit(0);
 SOCKET sock = ::socket(AF_INET, SOCK_DGRAM, 0);
 if(sock == SOCKET_ERROR)
 {
  cout<<"Fail socket()."<<endl;
  return 0;
 }
 sockaddr_in addr;
 addr.sin_family = AF_INET;
 addr.sin_port = htons(6000);
 addr.sin_addr.S_un.S_addr = INADDR_ANY;
 if(::bind(sock,(SOCKADDR*)&addr, sizeof(addr)) == SOCKET_ERROR)
 {
  cout<<"Failed bind()."<<endl;
  return 0;
 }
 
 char szTest[254]={0};
 int len = sizeof(addr);

 while(true)
 {
  int nRecv = recvfrom(sock,szTest,254,0,(SOCKADDR*)&addr,&len);
  if(nRecv > 0)
  {
   szTest[nRecv] = 0;
   cout<<"接受的数据为:"<<szTest<<endl;
  }
 }
 ::closesocket(sock);
 ::WSACleanup();
 getchar();
 return 0;
}

客户端:
#include "stdafx.h"
#include <iostream>
using namespace std;
#include <WinSock2.h>
#pragma  comment(lib,"WS2_32.lib")
#define MAX_BUFFER 256
int _tmain(int argc, _TCHAR* argv[])
{
 WSADATA wsaData;
 WORD sockVersion = MAKEWORD(2,2);
 if(::WSAStartup(sockVersion,&wsaData))
  exit(0);
 SOCKET sock = ::socket(AF_INET, SOCK_DGRAM, 0);
 if(sock == SOCKET_ERROR)
 {
  cout<<"Fail socket()."<<endl;
  return 0;
 }
 sockaddr_in addr;
 addr.sin_family = AF_INET;
 addr.sin_port = htons(6000);
 addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
 char szTest[] = "It is a test!";
 int len = sizeof(addr);
 if(SOCKET_ERROR != sendto(sock,szTest,strlen(szTest),0,(SOCKADDR*)&addr, sizeof(addr)))
 {
  cout<<"数据已发送..."<<endl;
 }
 else
  cout<<"发送错误!"<<endl;
 ::closesocket(sock);
 ::WSACleanup();
 getchar();
 return 0;
}

UDP 相对于TCP还是要简单一些
不是面向字节流的,所以传输过程中可能会丢失。
就本例来说,不管服务器端是否开启,客户端数据仍发送出去
0 0
原创粉丝点击