Visual C++ネットワークプログラミング学習(1)-UDPブロックモデル
Visual C++ネットワークプログラミング学習(1)-UDPブロックモデル
C++を用いて簡単なUDPブロックモデルを構築し,クライアントの送信とサーバの受信を行っただけである.プログラムはもう一回テストしました.もしみんなが見ている間に何か問題があったら、お互いに交流してほしいです.コードは次のとおりです.
サーバコード:
クライアントコード:
C++を用いて簡単なUDPブロックモデルを構築し,クライアントの送信とサーバの受信を行っただけである.プログラムはもう一回テストしました.もしみんなが見ている間に何か問題があったら、お互いに交流してほしいです.コードは次のとおりです.
サーバコード:
#include
#include
#pragma comment(lib,"Ws2_32.lib")
using namespace std;
#define SERVEPORT 10000
#define CLIENTPORT 100
class CUdpConnectServe
{
public:
CUdpConnectServe()
{};
~CUdpConnectServe()
{};
//socket
int InitSocketConnect(); // SOCKET
void CloseSocketConnect(); // SOCKET
int Receive(
_Out_writes_bytes_to_(len, return) __out_data_source(NETWORK) char FAR * buf,
_In_ int len,
_In_ int flags
);
//
sockaddr_in m_soClientAddr;
private:
SOCKET m_SocketServe;
sockaddr_in m_soServeAddr;
SOCKET m_SocketClient;
int m_nAddrlen;
};
// SOCKET
int CUdpConnectServe::InitSocketConnect()
{
// Winsock
WSADATA wsaData = { 0 };
WORD wVer = MAKEWORD(2,2);
if (0!=WSAStartup(wVer, &wsaData))
{
cout << " , :" << WSAStartup(wVer, &wsaData) << endl;
return 0;
}
//
if (NULL!=m_SocketServe)
{
closesocket(m_SocketServe);
}
m_SocketServe = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (INVALID_SOCKET==m_SocketServe)
{
cout << " , :" << WSAGetLastError() << endl;
return 0;
}
cout << " "<< endl;
//
m_soServeAddr.sin_family = AF_INET;
m_soServeAddr.sin_port = SERVEPORT;
m_soServeAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
if (bind(m_SocketServe, (sockaddr*)&m_soServeAddr,sizeof(m_soServeAddr)))
{
cout << " " << WSAGetLastError() << endl;
return 0;
}
cout << " "<< endl;
return 0;
}
// SOCKET
void CUdpConnectServe::CloseSocketConnect()
{
closesocket(m_SocketServe);
WSACleanup(); //
}
//
int CUdpConnectServe::Receive(__out_data_source(NETWORK) char * buf, int len, int flags)
{
m_nAddrlen= sizeof(m_soServeAddr);
int nRet = recvfrom(m_SocketServe, buf,len, flags, (sockaddr*)&m_soClientAddr,&m_nAddrlen);
return nRet;
}
//
void main()
{
CUdpConnectServe udpConnect;
udpConnect.InitSocketConnect();
//
udpConnect.m_soClientAddr.sin_family =AF_INET;
udpConnect.m_soClientAddr.sin_port = CLIENTPORT;
udpConnect.m_soClientAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
int buffsize = 10000;
char *revBuffer = (char*)malloc(sizeof(char)*buffsize);
while (1)
{
int nRet=udpConnect.Receive(revBuffer, buffsize,0);
cout << " " << nRet << " " << endl;
cout << " :" ;
for (int i=0;i
クライアントコード:
#include
#include
#include
#pragma comment(lib,"Ws2_32.lib")
using namespace std;
#define SERVEPORT 10000
#define CLIENTPORT 100
class CUdpConnectClient
{
public:
CUdpConnectClient()
{
m_nAddrlen = sizeof(m_soServeAddr);
};
~CUdpConnectClient()
{};
//socket
int InitSocketConnect(); // SOCKET
void CloseSocketConnect(); // SOCKET
int Send(
_In_reads_bytes_(len) const char FAR * buf,
_In_ int len,
_In_ int flags
);
//
sockaddr_in m_soServeAddr;
private:
SOCKET m_SocketServe;
sockaddr_in m_soClientAddr;
SOCKET m_SocketClient;
int m_nAddrlen;
};
// SOCKET
int CUdpConnectClient::InitSocketConnect()
{
// Winsock
WSADATA wsaData = { 0 };
WORD wVer = MAKEWORD(2, 2);
if (0 != WSAStartup(wVer, &wsaData))
{
cout << " , :" << WSAStartup(wVer, &wsaData) << endl;
return 0;
}
//
if (NULL != m_SocketClient)
{
closesocket(m_SocketClient);
}
m_SocketClient= socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (INVALID_SOCKET == m_SocketClient)
{
cout << " , :" << WSAGetLastError() << endl;
return 0;
}
cout << " " << endl;
return 0;
}
//
void CUdpConnectClient::CloseSocketConnect()
{
closesocket(m_SocketClient);
WSACleanup(); // Winsock
}
//
int CUdpConnectClient::Send(const char * buf, int len, int flags)
{
int nRet = sendto(m_SocketClient, buf, len, flags, (sockaddr *)&m_soServeAddr, m_nAddrlen);
if (nRet<0)
{
cout << " , :" << WSAGetLastError() << endl;
}
return nRet;
}
//
void main()
{
CUdpConnectClient udpConnect;
udpConnect.InitSocketConnect();
//
udpConnect.m_soServeAddr.sin_family = AF_INET;
udpConnect.m_soServeAddr.sin_port = SERVEPORT;
udpConnect.m_soServeAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
while (1)
{
cout << " :";
string s1;
cin >> s1;
int buffsize = 10000;
char *revBuffer = (char*)malloc(sizeof(char)*buffsize);
int i = 0;
for ( i= 0; i < s1.size(); i++)
{
*(revBuffer + i) = s1[i];
}
int nRet=udpConnect.Send(revBuffer,i,0);
cout << " "<< nRet<