主机流程:
1,建立流式套接字
2,套接字与本地地址绑定
3,在套接字上读写数据
4,关闭套接字
代码:
// 服务器UDP.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include<WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
#include<iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
SOCKET hSer;
WSAData wsaData;
int nRet;
if (nRet = WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
{
cout << "WSAStartup error!";
return -1;
}
//创建套接字
hSer = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (INVALID_SOCKET == hSer)
{
WSACleanup();
cout << "socket error" << endl;
return -1;
}
//绑定
sockaddr_in sSerAddr;
int nSerAddrLen;
sSerAddr.sin_family = AF_INET;
sSerAddr.sin_port = htons(8888);
sSerAddr.sin_addr.s_addr = htonl(ADDR_ANY);
nSerAddrLen = sizeof(sSerAddr);
nRet = bind(hSer, (LPSOCKADDR)&sSerAddr, nSerAddrLen);
if (nRet == SOCKET_ERROR)
{
closesocket(hSer);
WSACleanup();
cout << "bind error" << endl;
return -1;
}
sockaddr_in sClientAddr;
int nClientAddrlen;
char buf[512];
nClientAddrlen = sizeof(sClientAddr);
while (1)
{
nRet = recvfrom(hSer, buf, 512, 0, (LPSOCKADDR)&sClientAddr, &nClientAddrlen);
//int nErrorCode = WSAGetLastError();
if (nRet > 0)
{
buf[nRet] = '\0';
cout << "收到信息:"<<buf << endl;
}
}
closesocket(hSer);
WSACleanup();
cout << "Hello World!" << endl;
return 0;
}
客户端流程:
1,建立流式套接字
2,在套接字上读/写数据
3,关闭套接字
代码:
// 客户端UDP.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include<WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
#include<iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
SOCKET hClient;
WSAData wsaData;
int nRet;
if (nRet = WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
{
cout << "WSAStartup error!";
return -1;
}
//创建套接字
hClient = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (INVALID_SOCKET == hClient)
{
WSACleanup();
cout << "socket error" << endl;
return -1;
}
//绑定
sockaddr_in sSerAddr;
int nSerAddrLen;
sSerAddr.sin_family = AF_INET;
sSerAddr.sin_port = htons(8888);
sSerAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
nSerAddrLen = sizeof(sSerAddr);
char buf[215];
while (1)
{
cout << "输入信息:";
cin >> buf;
nRet = sendto(hClient, buf, strlen(buf), 0, (LPSOCKADDR)&sSerAddr, nSerAddrLen);
}
closesocket(hClient);
WSACleanup();
cout << "Hello World" << endl;
return 0;
}