Добрый день,такая беда,пишу курсовую и вроде все отлично,написал на с++,но в консоли,а теперь это все нужно перенести на форму,а я не знаю как правильно сделать.Пытался банально закинуть все в файл с формой,но ошибит,пытался еще подключить как-то к форме этот отдельный файл, все равно беда.
Вообщем вот код сервера,при выполнении все будет само собой вместо pritnf будет все выводиться в TextBox1.
Код:
// Server.cpp: главный файл проекта.
//#include "stdafx.h"
#undef UNICODE
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdlib.h>
#include <stdio.h>
// Need to link with Ws2_32.lib
#pragma comment (lib, "Ws2_32.lib")
// #pragma comment (lib, "Mswsock.lib")
#define DEFAULT_BUFLEN 512
#define DEFAULT_PORT "8000"
//#include "stdafx.h"
#include "winsock2.h"
#include "conio.h"
#include "Tchar.h"
#define SERVER_PORT 12345
#define BUF_SIZE 4096 // block transfer size
#define QUEUE_SIZE 10
int _tmain(int argc, _TCHAR* argv[])
{
int b, l, on = 1;
char recvbuf[10] = {};
SOCKET s, sa;
struct sockaddr_in channel; // holds IP address
WORD wVersionRequested;
WSADATA wsaData;
int err;
int bytesRecv;
//--- INITIALIZATION -----------------------------------
wVersionRequested = MAKEWORD(1, 1);
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0) {
// printf("WSAStartup error %ld", WSAGetLastError());
textBox1->Text = "WSAStartup error %ld" + System::Convert::ToString(WSAGetLastError());
WSACleanup();
// return false;
}
//------------------------------------------------------
//---- Build address structure to bind to socket.--------
memset(&channel, 0, sizeof(channel));// zerochannel
channel.sin_family = AF_INET;
channel.sin_addr.s_addr = htonl(INADDR_ANY);
channel.sin_port = htons(SERVER_PORT);
//--------------------------------------------------------
// ---- create SOCKET--------------------------------------
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (s < 0) {
// printf("", WSAGetLastError());
textBox1->Text = "socket error %ld" + System::Convert::ToString(WSAGetLastError());
WSACleanup();
// return false;
}
setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on));
//---------------------------------------------------------
//---- BIND socket ----------------------------------------
b = bind(s, (struct sockaddr *) &channel, sizeof(channel));
if (b < 0) {
//printf("", WSAGetLastError());
textBox1->Text = "bind error %ld" + System::Convert::ToString(WSAGetLastError());
WSACleanup();
// return false;
}
//----------------------------------------------------------
//---- LISTEN socket ----------------------------------------
l = listen(s, QUEUE_SIZE); // specify queue size
if (l < 0) {
//printf("", WSAGetLastError());
textBox1->Text = "listen error %ld" + System::Convert::ToString(WSAGetLastError());
WSACleanup();
// return false;
}
//-----------------------------------------------------------
while (1) {
//---- ACCEPT connection ------------------------------------
sa = accept(s, 0, 0); // block for connection request
if (sa < 0) {
//printf(" ", WSAGetLastError());
textBox1->Text = "accept error %ld" + System::Convert::ToString(WSAGetLastError());
WSACleanup();
// return false;
}
else {
//printf("");
textBox1->Text = "connection accepted";
}
//------------------------------------------------------------
// Socket is now set up and bound. Wait for connection and process it.
//---- RECV bytes --------------------------------------------
bytesRecv = recv(sa, recvbuf, 10, 0);
err = WSAGetLastError();// 10057 = A request to send or receive data was disallowed because the socket is not connected and (when sending on a datagram socket using a sendto call)
if (bytesRecv == 0 || bytesRecv == WSAECONNRESET) {
//printf("");
textBox1->Text = "Connection Closed.\n";
WSACleanup();
}
//printf(" ", );
textBox1->Text = "Bytes Recv: %s \n" + System::Convert::ToString(recvbuf);
closesocket(sa);
//-------------------------------------------------------------
}
closesocket(s);
WSACleanup();
getche();
//return 0;
}