Добрый день всем я недавно начал изучать язык С++ и умнея возникла проблема! в среде C++Builder 6 я написал панельку и теперь немогу разобраться мне нужно вставить код в эту панельку чтоб отдавать команды по сокету другой программе вот код панельки | Код | #include <vcl.h> #include <stdio.h> #pragma hdrstop #include "Panel.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm"
#define MY_PORT 2500 #define PRINTNUSERS TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner):TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { } //---------------------------------------------------------------------------
|
а вот код программы которую нужно объединить | Код | // Пример простого TCP-эхо-сервера
#include <stdio.h> #include <winsock2.h> // Wincosk2.h должен быть раньше windows! #include <windows.h>
#define MY_PORT 666 // Порт, который слушает сервер 666
// макрос для печати количества активных пользователей #define PRINTNUSERS if (nclients) printf("%d user on-line\n", nclients); \ else printf("No User on line\n");
// прототип функции, обслуживающий подключившихся пользователей DWORD WINAPI SexToClient(LPVOID client_socket);
// глобальная переменная - количество активных пользователей int nclients = 0;
int main(int argc, char* argv[]) { char buff[1024]; printf("TCP SERVER DEMO\n"); if (WSAStartup(0x0202, (WSADATA *)&buff[0])) { printf("Error WSAStartup %d\n", WSAGetLastError()); return -1; } SOCKET mysocket; if ((mysocket = socket(AF_INET, SOCK_STREAM, 0)) < 0) { printf("Error socket %d\n", WSAGetLastError()); WSACleanup(); return -1; }
sockaddr_in local_addr; local_addr.sin_family = AF_INET; local_addr.sin_port = htons(MY_PORT); // не забываем о сетевом порядке!!! local_addr.sin_addr.s_addr = 0; // сервер принимает подключения if (bind(mysocket, (sockaddr *)&local_addr, sizeof(local_addr))) { printf("Error bind %d\n", WSAGetLastError()); closesocket(mysocket); // закрываем сокет! WSACleanup(); return -1; } if (listen(mysocket, 0x100)) { printf("Error listen %d\n", WSAGetLastError()); closesocket(mysocket); WSACleanup(); return -1; }
printf("Ожидание подключений...\n"); SOCKET client_socket; // сокет для клиента sockaddr_in client_addr; // адрес клиента (заполняется системой) int client_addr_size = sizeof(client_addr); while ((client_socket = accept(mysocket, (sockaddr *)&client_addr, \ &client_addr_size))) { nclients++; // увеличиваем счетчик подключившихся клиентов HOSTENT *hst; hst = gethostbyaddr((char *)&client_addr. sin_addr.s_addr, 4, AF_INET);
printf("+%s [%s] new connect!\n", (hst) ? hst->h_name : "", inet_ntoa(client_addr.sin_addr)); PRINTNUSERS
DWORD thID; CreateThread(NULL, NULL, SexToClient, &client_socket, NULL, &thID); } return 0; } DWORD WINAPI SexToClient(LPVOID client_socket) { SOCKET my_sock; my_sock = ((SOCKET *)client_socket)[0]; char buff[20 * 1024]; #define sHELLO "Hello, Sailor\r\n"
// отправляем клиенту приветствие send(my_sock, sHELLO, sizeof(sHELLO), 0);
// цикл эхо-сервера: прием строки от клиента и возвращение ее клиенту int bytes_recv; while ((bytes_recv = recv(my_sock, &buff[0], sizeof(buff), 0)) && bytes_recv != SOCKET_ERROR) send(my_sock, &buff[0], bytes_recv, 0);
// если мы здесь, то произошел выход из цикла по причине // возращения функцией recv ошибки - соединение с клиентом разорвано nclients--; // уменьшаем счетчик активных клиентов printf("-disconnect\n"); PRINTNUSERS
// закрываем сокет closesocket(my_sock); return 0; }
|
так вот у меня неполучается заставить работать если я вставляю прям в код панельку не работает помогите разобраться заранее благодарен .....
|