Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define DEFAULT_PORT 50001
- #define DEFAULT_BUFLEN 20*1024
- #pragma comment(lib, "ws2_32.lib")
- #include <iostream>
- using namespace std;
- #include <WinSock2.h>
- #include <windows.h>
- #include <queue>
- #include <string>
- int nclients = 0;
- queue<string> messages;
- char buf [DEFAULT_BUFLEN];
- char for_sending[DEFAULT_BUFLEN];
- /*LPTHREAD_START_ROUTINE*/ DWORD WINAPI recieve_message(LPVOID temp/*SOCKET & s*/){
- SOCKET s = (SOCKET)temp;
- char buf[DEFAULT_BUFLEN];
- int result;
- while(true){
- result = recv(s,buf,sizeof(buf)-1,0);
- if(result == SOCKET_ERROR){
- cout << "Disconnected" << endl;
- break;
- }
- cout << "Friend: " << buf << endl;
- };
- return 0;
- }
- DWORD WINAPI read_message(LPVOID temp){
- while (true){
- cout << "Your message: ";
- cin.getline(buf,DEFAULT_BUFLEN-1);
- if (strcmp(buf,"stop conversation\0")) break;
- messages.push(buf);
- }
- return 0;
- }
- DWORD WINAPI send_message(LPVOID temp/*SOCKET & s*/){
- SOCKET s = (SOCKET)temp; //((SOCKET*)temp)[0]; или *(SOCKET*)temp;
- string str(for_sending);
- while (true){
- str = messages.front();
- if (str != ""){
- messages.pop();
- int i = 0;
- while(str[i] != '\0'){
- for_sending[i] = str[i];
- }
- int result = send(s,for_sending,strlen(buf)+1,0);
- if(result == SOCKET_ERROR){
- cout << "Disconnected" << endl;
- break;
- }
- }
- }
- return 0;
- }
- int main(){
- WSADATA wsaData;
- if (WSAStartup(MAKEWORD(2,0),&wsaData)){
- cout << "Error " << WSAGetLastError() << endl;
- system("pause");
- return 1;
- }
- SOCKET server_socket = socket(AF_INET,SOCK_STREAM,0);
- if (server_socket == INVALID_SOCKET){
- cout << "Socket error " << WSAGetLastError() << endl;
- WSACleanup();
- system("pause");
- return 1;
- }
- struct sockaddr_in server_addr;
- server_addr.sin_family = AF_INET;
- server_addr.sin_port = htons(DEFAULT_PORT);
- server_addr.sin_addr.s_addr = INADDR_ANY;
- if (bind(server_socket,(SOCKADDR*)&server_addr,sizeof(server_addr))){
- cout << "Error " << WSAGetLastError() << endl;
- closesocket(server_socket);
- WSACleanup();
- system("pause");
- return 1;
- }
- if (listen(server_socket,4)){
- cout << "Error " << WSAGetLastError() << endl;
- closesocket(server_socket);
- WSACleanup();
- system("pause");
- return 0;
- }
- struct sockaddr_in client_addr;
- int client_addr_size = sizeof(client_addr);
- SOCKET client_socket = accept(server_socket,(SOCKADDR*)&client_addr,&client_addr_size);
- if (client_socket == INVALID_SOCKET){
- cout << "Socket error " << WSAGetLastError() << endl;
- closesocket(server_socket);
- closesocket(client_socket);
- WSACleanup();
- system("pause");
- return 1;
- }
- cout << "Your message: " <<endl;
- cin.getline(buf,DEFAULT_BUFLEN-1);
- LPVOID temp1;
- DWORD dw1, dw2;
- HANDLE WINAPI h2 = CreateThread(NULL,NULL,read_message,&temp1,NULL,&dw2);
- HANDLE WINAPI h1 = CreateThread(NULL,NULL,/*(LPTHREAD_START_ROUTINE)*/send_message,/*(LPVOID)*/&client_socket,NULL,&dw1);
- //HANDLE WINAPI h2 = CreateThread(NULL,NULL,read_message,&temp,NULL,&dw2);
- //recieve_message(client_socket);
- //send_message(&client_socket);
- closesocket(client_socket);
- closesocket(server_socket);
- WSACleanup();
- system("pause");
- return 0;
- }
Add Comment
Please, Sign In to add comment