Wc3Exp
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Не помещаю под тег //more// для удобства ковыряния. Вот это код клиента: Код: #include "stdafx.h" #pragma comment (lib, "ws2_32.lib") #include <iostream> #include <winsock2.h> // globals sockaddr_in s_inf; int len = sizeof(struct sockaddr_in); SOCKET s; HANDLE InThr; DWORD ThreadId; WSADATA wsa_dat; WSAEVENT sEvent; char IP[15]; // endglobals DWORD WINAPI InThrWork(LPVOID lpParam) { SOCKET s = (SOCKET)lpParam; char ch[256]; int lch = sizeof(ch)*2; int eventCode = 0; WSABUF inbuff; WSANETWORKEVENTS NetEvent; printf("%s","Thread start!\n"); //* while (true) { inbuff.buf = ch; inbuff.len = lch; printf("%s","Input thread : waiting data!\n"); //* eventCode = WSAWaitForMultipleEvents(1,&sEvent,FALSE,INFINITE,FALSE); printf("%s","Input thread : event run!\n"); //* WSAEnumNetworkEvents(s,sEvent,&NetEvent); if((NetEvent.lNetworkEvents & FD_READ) && (NetEvent.iErrorCode[FD_ACCEPT_BIT]==0)) { printf("%s","Input thread : READ event!\n"); //* WSARecv(s,&inbuff,1,0,0,NULL,NULL); printf("%s",inbuff.buf); } if((NetEvent.lNetworkEvents & FD_CLOSE) && (NetEvent.iErrorCode[FD_ACCEPT_BIT]==0)) { printf("%s","Input thread : CLOSE event!\n"); //* ExitThread(ThreadId); } } return 0; } int main (int argc, char* argv[]) { char ch[256]; int lch = sizeof(ch)*2; WSABUF outbuff; unsigned long bl = 0; if ( WSAStartup(2,&wsa_dat) !=0 ) { puts("WSAStartup - False.\n"); exit (1); } if (wsa_dat.wVersion != 2) { puts("WSA Version - False.\n"); WSACleanup (); exit (1); } s = WSASocket(AF_INET,SOCK_STREAM,IPPROTO_TCP,NULL,0,NULL); if ((s==INVALID_SOCKET) | (s==SOCKET_ERROR)) { puts("SOCKET create - False.\n"); exit (1); }else { sEvent = WSACreateEvent(); WSAEventSelect(s,sEvent,FD_READ | FD_CLOSE); } puts("Enter IP adress:"); scanf("%15s",IP); if (strlen(IP)<7) { strcpy(IP,"127.0.0.1"); } s_inf.sin_family = AF_INET; s_inf.sin_port = htons(1501); s_inf.sin_addr.s_addr = inet_addr(IP); if (WSAConnect(s,(struct sockaddr*)&s_inf,sizeof(s_inf),NULL,NULL,0,0)==SOCKET_ERROR) { printf("%s","Connection - False.\n"); }else { InThr = CreateThread(NULL,0,InThrWork,(LPVOID)s,0,&ThreadId); } puts("====================\n"); while(true) { scanf("%512s",ch); outbuff.buf = ch; outbuff.len = lch; WSASend(s,&outbuff,1,0,0,NULL,NULL); puts("--------------------"); } return 0; } | А это код недосервера: Код: #define MAX_CLIENTS 10 #pragma comment (lib, "ws2_32.lib") #include <iostream> #include <winsock2.h> #include <string.h> using namespace std; // globals sockaddr_in ws_client_info[MAX_CLIENTS] , ws_server_info; SOCKET client_socket[MAX_CLIENTS] , server_socket; WSADATA ws_dat; int client_count = 0; int len = sizeof(struct sockaddr_in); HANDLE InputTread; HANDLE EventSoc[MAX_CLIENTS]; DWORD InputTreadId; HANDLE NewTreade[MAX_CLIENTS]; DWORD TreadeId[MAX_CLIENTS]; int Key[MAX_CLIENTS]; WSABUF wsaBuff; // endglobals DWORD WINAPI client_work (LPVOID lpParam) { int client_index = (int)lpParam - 1; SOCKET client_soc = client_socket[client_index]; int index = 0; // char buff[512]; wsaBuff.buf = "Connection complete."; wsaBuff.len = strlen("Connection complete."); WSASend(client_socket[client_index],&wsaBuff,1,0,0,NULL,NULL); puts("Treade start!\n"); /* while(true) { WSAWaitForMultipleEvents(2,&EventSoc[client_index],false,WSA_INFINITE,false); if (WSARecv(client_soc,&wsaBuff,1,0,0,NULL,NULL)==SOCKET_ERROR) { closesocket(client_soc); break; } else { puts(buff); while(index<50) { if (Key[index]==1) { if (client_socket[index]!=client_soc) { send(client_socket[index],buff,strlen(buff),0); } } } } }*/ return 0; } int main () { memset(&ws_client_info,0,len); memset(&ws_server_info,0,len); if (WSAStartup (2,&ws_dat) != 0) { cerr << "WSAStartup - False." << endl; exit (1); } if (ws_dat.wVersion != 2) { cerr << "WSA Version - False." << endl; WSACleanup (); exit (1); } server_socket = WSASocket(AF_INET,SOCK_STREAM,IPPROTO_TCP,NULL,0,0); if (server_socket == INVALID_SOCKET) { cerr << "Socket create - False."<< endl; exit (1); } ws_server_info.sin_family = AF_INET; ws_server_info.sin_port = htons(1501); ws_server_info.sin_addr.s_addr =htonl(INADDR_ANY); if (bind(server_socket,(struct sockaddr*)&ws_server_info,sizeof(ws_server_info)) == SOCKET_ERROR) { cout << "Bind - False." << endl; WSACleanup (); exit (1); } if (listen(server_socket,5)==SOCKET_ERROR) { cout << "Listen-mode - False." << endl; exit (1); } cout << "Server online!\n" << endl; while (client_count < MAX_CLIENTS) { client_socket[client_count] = WSAAccept(server_socket,(struct sockaddr*)&ws_client_info[client_count],&len,NULL,0); if (client_socket[client_count] == INVALID_SOCKET) { WSACleanup (); return 0; } else { // WSAEventSelect(client_socket[client_count],EventSoc[client_count],FD_READ); // bind(client_socket[client_count],(struct sockaddr*)&ws_client_info[client_count],len); cout << "Now client on server: " << client_count+1 << endl; // NewTreade[client_count] = CreateThread(NULL,0,client_work,(LPVOID)client_count,0,&TreadeId[client_count]); wsaBuff.buf = "Connection complete."; wsaBuff.len = strlen("Connection complete."); WSASend(client_socket[client_count],&wsaBuff,1,0,0,NULL,NULL); Key[client_count] = 1; client_count++; } } WSACleanup (); return 0; } |
| Всего записей: 39 | Зарегистр. 01-01-2011 | Отправлено: 20:39 15-01-2011 | Исправлено: Wc3Exp, 20:42 15-01-2011 |
|