Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <string.h>
- #include <sys/socket.h>
- #include <sys/types.h>
- #include <netinet/in.h>
- #include <arpa/inet.h>
- #include <unistd.h>
- const char* HOST = "192.168.1.19";
- const unsigned short int PORT = 55555; // Max is 65,535
- const int BUFFER_SIZE = 1024 * 4; // 4kB
- int main(int argc, char** argv) {
- int doorBell_sock = socket(AF_INET, SOCK_STREAM, 0);
- if(doorBell_sock == -1){
- std::cerr << "Couldn't create socket!" << std::endl;
- return -1;
- }
- sockaddr_in hint;
- hint.sin_family = AF_INET;
- hint.sin_port = htons(PORT); // Convert port number bytes to small endian just in case
- inet_aton(HOST, &hint.sin_addr); // Bind to any available IP address
- int _bind = bind(doorBell_sock, (sockaddr*) &hint, sizeof(hint));
- if(_bind == -1){
- std::cerr << "Couldn't bind socket!" << std::endl;
- return -1;
- }
- int _listen = listen(doorBell_sock, SOMAXCONN);
- if(_listen == -1){
- std::cerr << "Couldn't listen on socket!" << std::endl;
- return -1;
- }
- sockaddr_in client_addr;
- socklen_t client_addr_size = sizeof(client_addr);
- int client_sock = accept(doorBell_sock, (sockaddr*) &client_addr, &client_addr_size);
- if(client_sock == -1){
- std::cerr << "Couldn't accept user connection!" << std::endl;
- return -1;
- }
- close(doorBell_sock);
- std::cout << inet_ntoa(client_addr.sin_addr) << " Connected to server" << std::endl;
- char buffer[BUFFER_SIZE];
- while(true){
- memset(buffer, 0, BUFFER_SIZE);
- int bytes_recv = recv(client_sock, buffer, BUFFER_SIZE, 0);
- if(bytes_recv == -1){
- std::cerr << "Couldn't read message!" << std::endl;
- break;
- }else if(bytes_recv == 0){
- std::cout << "client disconnected" << std::endl;
- break;
- }
- std::string msg = std::string(buffer, 0, bytes_recv - 2);
- if(msg == "quit"){
- break;
- }
- std::cout << inet_ntoa(client_addr.sin_addr) << ": " << msg << std::endl;
- send(client_sock, buffer, bytes_recv + 1, 0);
- }
- close(client_sock);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement