服务端:
#include "stdafx.h"
#include <iostream>
using namespace std;
#include <WinSock2.h>
#pragma comment(lib,"WS2_32.lib")
#define MAX_BUFFER 256
#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;
}
{
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;
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;
}
{
cout<<"Failed bind()."<<endl;
return 0;
}
char szTest[254]={0};
int len = sizeof(addr);
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;
::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
#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);
{
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;
{
cout<<"数据已发送..."<<endl;
}
else
cout<<"发送错误!"<<endl;
::closesocket(sock);
::WSACleanup();
getchar();
return 0;
}
UDP 相对于TCP还是要简单一些
不是面向字节流的,所以传输过程中可能会丢失。
就本例来说,不管服务器端是否开启,客户端数据仍发送出去
::WSACleanup();
getchar();
return 0;
}
UDP 相对于TCP还是要简单一些
不是面向字节流的,所以传输过程中可能会丢失。
就本例来说,不管服务器端是否开启,客户端数据仍发送出去