// Server side C/C++ program to demonstrate Socket programming //this uses threads to allow a server and a client to do network chat stuff over 127.0.0.1:8080. the ui is out of sync because it doesn't use ncurses but the message sending and printing part still works #include #include #include #include #include #include #include #include using namespace std; #define PORT 8080 #ifdef _WIN32 /#include ; void fnsleep(unsigned milliseconds) { Sleep(milliseconds); } #else #include void fnsleep(unsigned milliseconds) { usleep(milliseconds * 1000); } #endif void checkForNewMsgs(int socket, int valreaded, int otherNum); void checkForNewMsgs(int socket, int valreaded, int otherNum) { int valreadOne; char newBuffer[1024] = {0}; while (3 == 3 && newBuffer != "exit") { //printf("Client: "); for(int i = 0; i < 1024; i++) { newBuffer[i] = char(0); } valreadOne = read( socket , newBuffer, 1024); if (newBuffer != "") { printf("Client: "); printf("%s\n",newBuffer ); } } fnsleep(1000); } int main(int argc, char const *argv[]) { int server_fd, new_socket, valread; struct sockaddr_in address; int opt = 1; int addrlen = sizeof(address); char buffer[1024] = {0}; char *hello = "Hello from server"; // Creating socket file descriptor if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) { perror("socket failed"); exit(EXIT_FAILURE); } // Forcefully attaching socket to the port 8080 if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) { perror("setsockopt"); exit(EXIT_FAILURE); } address.sin_family = AF_INET; address.sin_addr.s_addr = INADDR_ANY; address.sin_port = htons( PORT ); // Forcefully attaching socket to the port 8080 if (bind(server_fd, (struct sockaddr *)&address, sizeof(address))<0) { perror("bind failed"); exit(EXIT_FAILURE); } if (listen(server_fd, 3) < 0) { perror("listen"); exit(EXIT_FAILURE); } if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen))<0) { perror("accept"); exit(EXIT_FAILURE); } string message; thread t(checkForNewMsgs, new_socket, valread, 1024); t.detach(); while (message != "exit") { //string message; cout << "> "; getline(cin, message); //valread = read( new_socket , buffer, 1024); //printf("%s\n",buffer ); send(new_socket , message.c_str() , strlen(message.c_str()) , 0 ); //cout << "Hello message sent" << endl; } return 0; }