Guest User

Untitled

a guest
Dec 17th, 2018
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.21 KB | None | 0 0
  1. #define DEFAULT_PORT 50001
  2. #define DEFAULT_BUFLEN 20*1024
  3.  
  4. #pragma comment(lib, "ws2_32.lib")
  5.  
  6. #include <iostream>
  7. using namespace std;
  8.  
  9. #include <WinSock2.h>
  10. #include <windows.h>
  11. #include <queue>
  12. #include <string>
  13.  
  14.  
  15. int nclients = 0;
  16. queue<string> messages;
  17. char buf [DEFAULT_BUFLEN];
  18. char for_sending[DEFAULT_BUFLEN];
  19.  
  20. /*LPTHREAD_START_ROUTINE*/ DWORD WINAPI recieve_message(LPVOID temp/*SOCKET & s*/){
  21.     SOCKET s = (SOCKET)temp;
  22.     char buf[DEFAULT_BUFLEN];
  23.     int result;
  24.     while(true){
  25.         result = recv(s,buf,sizeof(buf)-1,0);
  26.         if(result == SOCKET_ERROR){
  27.             cout << "Disconnected" << endl;
  28.             break;
  29.         }
  30.         cout << "Friend: " << buf << endl;
  31.     };
  32.  
  33.     return 0;
  34. }
  35.  
  36. DWORD WINAPI read_message(LPVOID temp){
  37.     while (true){
  38.         cout << "Your message: ";
  39.         cin.getline(buf,DEFAULT_BUFLEN-1);
  40.         if (strcmp(buf,"stop conversation\0")) break;
  41.         messages.push(buf);
  42.     }
  43.     return 0;
  44. }
  45. DWORD WINAPI send_message(LPVOID temp/*SOCKET & s*/){
  46.     SOCKET s = (SOCKET)temp;                             //((SOCKET*)temp)[0]; или *(SOCKET*)temp;
  47.     string str(for_sending);
  48.     while (true){
  49.         str = messages.front();
  50.         if (str != ""){
  51.         messages.pop();
  52.         int i = 0;
  53.        
  54.         while(str[i] != '\0'){
  55.             for_sending[i] = str[i];
  56.         }
  57.  
  58.         int result = send(s,for_sending,strlen(buf)+1,0);
  59.         if(result == SOCKET_ERROR){
  60.             cout << "Disconnected" << endl;
  61.             break;
  62.         }
  63.         }
  64.     }
  65.     return 0;
  66. }
  67.  
  68. int main(){
  69.  
  70.     WSADATA wsaData;
  71.     if (WSAStartup(MAKEWORD(2,0),&wsaData)){
  72.         cout << "Error " << WSAGetLastError() << endl;
  73.         system("pause");
  74.         return 1;
  75.     }
  76.  
  77.     SOCKET server_socket = socket(AF_INET,SOCK_STREAM,0);
  78.     if (server_socket == INVALID_SOCKET){
  79.         cout << "Socket error " << WSAGetLastError() << endl;
  80.         WSACleanup();
  81.         system("pause");
  82.         return 1;
  83.     }
  84.  
  85.     struct sockaddr_in server_addr;
  86.     server_addr.sin_family = AF_INET;
  87.     server_addr.sin_port = htons(DEFAULT_PORT);
  88.     server_addr.sin_addr.s_addr = INADDR_ANY;
  89.  
  90.     if (bind(server_socket,(SOCKADDR*)&server_addr,sizeof(server_addr))){
  91.         cout << "Error " << WSAGetLastError() << endl;
  92.         closesocket(server_socket);
  93.         WSACleanup();
  94.         system("pause");
  95.         return 1;
  96.     }
  97.  
  98.     if (listen(server_socket,4)){
  99.         cout << "Error " << WSAGetLastError() << endl;
  100.         closesocket(server_socket);
  101.         WSACleanup();
  102.         system("pause");
  103.         return 0;
  104.     }
  105.  
  106.     struct sockaddr_in client_addr;
  107.     int client_addr_size = sizeof(client_addr);
  108.     SOCKET client_socket = accept(server_socket,(SOCKADDR*)&client_addr,&client_addr_size);
  109.     if (client_socket == INVALID_SOCKET){
  110.         cout << "Socket error " << WSAGetLastError() << endl;
  111.         closesocket(server_socket);
  112.         closesocket(client_socket);
  113.         WSACleanup();
  114.         system("pause");
  115.         return 1;
  116.     }
  117.  
  118.     cout << "Your message: " <<endl;
  119.     cin.getline(buf,DEFAULT_BUFLEN-1);
  120.     LPVOID temp1;
  121.     DWORD dw1, dw2;
  122.     HANDLE WINAPI h2 = CreateThread(NULL,NULL,read_message,&temp1,NULL,&dw2);
  123.     HANDLE WINAPI h1 = CreateThread(NULL,NULL,/*(LPTHREAD_START_ROUTINE)*/send_message,/*(LPVOID)*/&client_socket,NULL,&dw1);
  124.     //HANDLE WINAPI h2 = CreateThread(NULL,NULL,read_message,&temp,NULL,&dw2);
  125.     //recieve_message(client_socket);
  126.  
  127.     //send_message(&client_socket);
  128.  
  129.  
  130.     closesocket(client_socket);
  131.     closesocket(server_socket);
  132.     WSACleanup();
  133.  
  134.  
  135.     system("pause");
  136.     return 0;
  137. }
Add Comment
Please, Sign In to add comment