#pragma hdrstop
#include <tchar.h>
#pragma argsused
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#pragma comment(lib,"ws2_32.lib")
DWORD WINAPI ClientThread(LPVOID lpParam) {
SOCKET hSocket = (SOCKET)lpParam;
STARTUPINFO si;
PROCESS_INFORMATION pi;
memset(&si, 0, sizeof(si));
si.cb = sizeof(si);
si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
si.hStdInput = si.hStdOutput = si.hStdError = (void*)hSocket;
CreateProcess("client1.exe", 0, NULL, NULL, 0, NULL, NULL,
NULL, &si, &pi);
return 0;
}
DWORD WINAPI NetThread() {
SOCKET sServerListen, sClient;
char text[22] = {
0
};
unsigned long ip;
unsigned short port;
struct sockaddr_in localaddr, clientaddr;
HANDLE hThread;
DWORD dwThreadId;
int iSize;
sServerListen = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, 0, 0, 0);
if (sServerListen == SOCKET_ERROR) {
MessageBox(0, "Can't create socket", "Error", 0);
return 0;
}
localaddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
localaddr.sin_family = AF_INET;
localaddr.sin_port = htons(8080);
if (bind(sServerListen, (struct sockaddr*) & localaddr,
sizeof(localaddr)) == SOCKET_ERROR) {
MessageBox(0, "Can't bind", "Error", 0);
return 1;
}
listen(sServerListen, 5);
while (1) {
iSize = sizeof(clientaddr);
sClient = accept(sServerListen, (struct sockaddr*) & clientaddr,
&iSize);
if (sClient == INVALID_SOCKET) {
MessageBox(0, "Accept filed", "Error", 0);
break;
}
WSANtohl(sClient, clientaddr.sin_addr.S_un.S_addr, &ip);
WSANtohs(sClient, clientaddr.sin_port, &port);
sprintf(text, "Connect with client %d.%d.%d.%d:%hd",
(ip & 0xFF000000) >> 24, (ip & 0xFF0000) >> 16,
(ip & 0xFF00) >> 8, ip & 0xFF, port);
printf("%s\n", text);
hThread = CreateThread(NULL, 0, ClientThread, (LPVOID)sClient, 0,
&dwThreadId);
if (hThread == NULL) {
MessageBox(0, "Create thread filed", "Error", 0);
break;
}
CloseHandle(hThread);
}
closesocket(sServerListen);
return 0;
}
int _tmain(int argc, _TCHAR* argv[]) {
WSADATA wsd;
char host[128];
struct hostent* ip;
// char ip[255];
if (WSAStartup(MAKEWORD(2, 2), &wsd)) {
MessageBox(0, "Can't load WinSock2", "Error", 0);
return 0;
}
gethostname(host, sizeof(host));
ip = gethostbyname(host);
printf("Start server on Host %s (%d.%d.%d.%d): Listening port 8080...\n", host,
(int)(ip->h_addr_list[0][0] & 0xFF),
(int)(ip->h_addr_list[0][1] & 0xFF),
(int)(ip->h_addr_list[0][2] & 0xFF),
(int)(ip->h_addr_list[0][3] & 0xFF));
NetThread();
WSACleanup();
return 0;
}
Сервер/Клиент
Код сервера
Код:
Код программы
Код:
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int _tmain(int argc, _TCHAR* argv[]) {
char lpCommand[255];
while (1) {
printf(">");
scanf("%s", lpCommand);
}
return 0;
}
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int _tmain(int argc, _TCHAR* argv[]) {
char lpCommand[255];
while (1) {
printf(">");
scanf("%s", lpCommand);
}
return 0;
}
Перепробовал все функции ввода вывода которые знал, fread/fwrite,ReadConsole/WriteConsole,ReadFile/WriteFile ведут каждая себя по разному но не дает результата. Думал может из за торента тормозит вывод, еще кучу всего перепробовал. А потом нашару поставил после вывода fflush(stdout); и все запахало. ппц завтыкал