![]() |
Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Текст программы «Клиент», использующей протокол UDP ⇐ ПредыдущаяСтр 6 из 6
#pragma once #include < winsock.h> #include < stdio.h> #define WSA_NETEVENT (WM_USER+2) #define SERVER_PORT 0x2001 #define CLIENT_PORT 0x2011
SOCKET UDPSocket; sockaddr_in CallAddress; sockaddr_in OurAddress;
namespace Client { using namespace System; using namespace System:: ComponentModel; using namespace System:: Collections; using namespace System:: Windows:: Forms; using namespace System:: Data; using namespace System:: Drawing;
public ref class Form1: public System:: Windows:: Forms:: Form { public: Form1(void) { InitializeComponent(); } protected: ~Form1() { if (components) { delete components; } } private: System:: Windows:: Forms:: TextBox^ textBox1; private: System:: Windows:: Forms:: ListBox^ listBox2; private: System:: Windows:: Forms:: ListBox^ listBox1; private: System:: Windows:: Forms:: Button^ button2; private: System:: Windows:: Forms:: Label^ label1; private: System:: Windows:: Forms:: TextBox^ textBox2; private: System:: Windows:: Forms:: Label^ label2; private: System:: Windows:: Forms:: TextBox^ textBox3; private: System:: Windows:: Forms:: Label^ label3; private: System:: ComponentModel:: Container ^components;
#pragma region Windows Form Designer generated code void InitializeComponent(void) { // Текст этой функции генерируется автоматически, поэтому // он пропущен для краткости } #pragma endregion private: System:: Void Form1_Load(System:: Object^ sender, EventArgs^ e) { WSADATA WSAData; int rc; char Name[101], *IpAddr, Buf[1000]; PHOSTENT phe;
rc = WSAStartup(MAKEWORD(2, 0), & WSAData); if (rc! = 0) { listBox1-> Items-> Add(" Ошибка инициализации WSAStartup" ); return; } // if
UDPSocket = socket(AF_INET, SOCK_DGRAM, 0); if (UDPSocket == INVALID_SOCKET) { listBox1-> Items-> Add(" Протокол UDP не установлен." ); } // if
memset(& OurAddress, 0, sizeof(OurAddress)); OurAddress.sin_family = AF_INET; OurAddress.sin_port = CLIENT_PORT; rc = bind(UDPSocket, (LPSOCKADDR)& OurAddress, sizeof(sockaddr_in)); if (rc == SOCKET_ERROR) { listBox1-> Items-> Add(" Адресная ошибка" ); return; } // if
rc= WSAAsyncSelect(UDPSocket, (HWND)(this-> Handle.ToInt32()), WSA_NETEVENT, FD_READ); if (rc! = 0) { listBox1-> Items-> Add(" Ошибка WSAAsyncSelect" ); return; } // if
gethostname(Name, 101); strcpy(Buf, " Имя компьютера " ); strcat(Buf, Name); String ^ s= gcnew String(Buf); listBox1-> Items-> Add(s);
phe = gethostbyname(Name); if (phe! = NULL) { memcpy((void *)& (OurAddress.sin_addr), phe-> h_addr, phe-> h_length); IpAddr = inet_ntoa(OurAddress.sin_addr); strcpy(Buf, " IP-Адрес " ); strcat(Buf, IpAddr); String ^ s2= gcnew String(Buf); listBox1-> Items-> Add(s2); } // if listBox1-> Items-> Add(L" Клиент запущен" ); } // ------------------------------------------------------------------------------------------------- protected: virtual void WndProc (Message% m) override { int rc, l=sizeof(CallAddress); wchar_t Buf[500];
if (m.Msg == WSA_NETEVENT) { if (m.LParam.ToInt32() == FD_READ) { rc = recvfrom((SOCKET)m.WParam.ToInt32(), (char *)Buf, sizeof(Buf)-1, 0, (PSOCKADDR)& CallAddress, & l); if (rc == SOCKET_ERROR) { rc = WSAGetLastError(); listBox1-> Items-> Add(String:: Format( " Ошибка recv " " {0}", rc)); return; } // if if (rc > = 1) { String ^ s= gcnew String(Buf); listBox2-> Items-> Add(s); } // if } // if } // if Form:: WndProc( m ); } // WndProc // ------------------------------------------------------------------------------------------------- private: System:: Void button2_Click(System:: Object^ sender, EventArgs^ e) { int rc, l, i; char Buf[500]; wchar_t Buf2[1000]; PHOSTENT phe;
memset(& CallAddress, 0, sizeof(CallAddress)); CallAddress.sin_family = AF_INET; CallAddress.sin_port = SERVER_PORT; l = textBox2-> Text-> Length; if (l > 0) { for (i=0; i < l; i++) { Buf[i] = textBox2-> Text-> default[i]; Buf[i+1] = 0; } // for CallAddress.sin_addr.s_addr = inet_addr(Buf); } else { l = textBox3-> Text-> Length; if (l > 0) { for (i=0; i < l; i++) { Buf[i] = textBox3-> Text-> default[i]; Buf[i+1] = 0; } // for phe = gethostbyname(Buf); if (phe! = NULL) { memcpy((void *)& (CallAddress.sin_addr), phe-> h_addr, phe-> h_length); } // if } else { return; } // else } // else
l = textBox1-> Text-> Length; if (l > 0) { for (i=0; i < l; i++) { Buf2[i] = textBox1-> Text-> default[i]; Buf2[i+1] = 0; } // for
rc = sendto(UDPSocket, (char *)Buf2, 2*l+2, 0, (LPSOCKADDR)& CallAddress, sizeof(CallAddress)); if (rc == SOCKET_ERROR) { rc = WSAGetLastError(); listBox1-> Items-> Add(String:: Format(" Ошибка recv " " {0}", rc)); return; } // if String ^ s= gcnew String(Buf2); listBox2-> Items-> Add(s); } // if }// ---------------------------------------------------------------------------------------- private: System:: Void Form1_FormClosed(System:: Object^ sender, System:: Windows:: Forms:: FormClosedEventArgs^ e) { closesocket(UDPSocket); WSACleanup(); } //Form1_FormClosed }; } Приложение 2 Текст программы «Сервер», использующей протокол UDP #pragma once #include < winsock.h> #include < stdio.h> #define WSA_NETEVENT (WM_USER+2) #define SERVER_PORT 0x2001 #define CLIENT_PORT 0x2011
SOCKET UDPSocket; sockaddr_in CallAddress; sockaddr_in OurAddress;
namespace Server { using namespace System; using namespace System:: ComponentModel; using namespace System:: Collections; using namespace System:: Windows:: Forms; using namespace System:: Data; using namespace System:: Drawing; using namespace System:: Security:: Permissions;
public ref class Form1: public System:: Windows:: Forms:: Form { public: Form1(void) { InitializeComponent(); }
protected: ~Form1() { if (components) { delete components; } } private: System:: Windows:: Forms:: ListBox^ listBox1; private: System:: Windows:: Forms:: ListBox^ listBox2; private: System:: Windows:: Forms:: TextBox^ textBox1; private: System:: Windows:: Forms:: Button^ button1; private: System:: ComponentModel:: Container ^components;
#pragma region Windows Form Designer generated code void InitializeComponent(void) { // Текст этой функции генерируется автоматически, поэтому // он пропущен для краткости } #pragma endregion // ------------------------------------------------------------------------------------------------- private: System:: Void Form1_Load(System:: Object^ sender, EventArgs^ e) { WSADATA WSAData; int rc; char Name[101], *IpAddr, Buf[1000]; PHOSTENT phe;
rc = WSAStartup(MAKEWORD(2, 0), & WSAData); if (rc! = 0) { listBox1-> Items-> Add(" Ошибка инициализации WSAStartup" ); return; } // if
UDPSocket = socket(AF_INET, SOCK_DGRAM, 0); if (UDPSocket == INVALID_SOCKET) { listBox1-> Items-> Add(" Протокол UDP не установлен." ); } // if
memset(& OurAddress, 0, sizeof(OurAddress)); OurAddress.sin_family = AF_INET; OurAddress.sin_port = SERVER_PORT; rc =bind(UDPSocket, (LPSOCKADDR)& OurAddress, sizeof(sockaddr_in)); if (rc == SOCKET_ERROR) { listBox1-> Items-> Add(" Адресная ошибка" ); return; } // if
rc = WSAAsyncSelect(UDPSocket, (HWND)(this-> Handle.ToInt32()), WSA_NETEVENT, FD_READ); if (rc! = 0) { listBox1-> Items-> Add(" Ошибка WSAAsyncSelect" ); return; } // if
gethostname(Name, 101); strcpy(Buf, " Имя компьютера " ); strcat(Buf, Name); String ^ s= gcnew String(Buf); listBox1-> Items-> Add(s);
phe = gethostbyname(Name); if (phe! = NULL) { memcpy((void *)& (OurAddress.sin_addr), phe-> h_addr, phe-> h_length); IpAddr = inet_ntoa(OurAddress.sin_addr); strcpy(Buf, " IP-Адрес " ); strcat(Buf, IpAddr); String ^ s2= gcnew String(Buf); listBox1-> Items-> Add(s2); } // if listBox1-> Items-> Add(L" Сервер запущен" ); } // Form1_Load // ------------------------------------------------------------------------------------------------- protected: virtual void WndProc (Message% m) override { int rc, l=sizeof(CallAddress); wchar_t Buf[500];
if (m.Msg == WSA_NETEVENT) { if (m.LParam.ToInt32() == FD_READ) { rc = recvfrom((SOCKET)m.WParam.ToInt32(), (char *)Buf, sizeof(Buf)- 1, 0, (PSOCKADDR)& CallAddress, & l); if (rc == SOCKET_ERROR) { rc = WSAGetLastError(); listBox1-> Items-> Add(String:: Format(" Ошибка " " recvfrom {0}", rc)); return; } // if if (rc > = 1) { String ^ s= gcnew String(Buf); listBox2-> Items-> Add(s); } // if } // if } // if Form:: WndProc( m ); } // WndProc // ------------------------------------------------------------------------------------------------- private: System:: Void button1_Click(System:: Object^ sender, EventArgs^ e) { int rc, i, l; wchar_t Buf[501];
l = textBox1-> Text-> Length; if (l == 0) return; for (i=0; i < l; i++) { Buf[i] = textBox1-> Text-> default[i]; Buf[i+1] = 0; } // for
rc = sendto(UDPSocket, (char *)Buf, 2*l+2, 0, (PSOCKADDR)& CallAddress, sizeof(CallAddress)); if (rc == SOCKET_ERROR) { rc = WSAGetLastError(); listBox1-> Items-> Add(String:: Format( " Ошибка sendto {0}", rc )); return; } // if listBox1-> Items-> Add(textBox1-> Text); } // button1_Click // ------------------------------------------------------------------------------------------------- private: System:: Void Form1_FormClosed(System:: Object^ sender, System:: Windows:: Forms:: FormClosedEventArgs^ e) { closesocket(UDPSocket); WSACleanup(); } //Form1_FormClosed }; } Приложение 3 |
Последнее изменение этой страницы: 2020-02-16; Просмотров: 163; Нарушение авторского права страницы