Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <sys/socket.h>
- #include <arpa/inet.h>
- #include <stdlib.h>
- #include <unistd.h>
- int socket_desc, client_sock;
- void close_socket(void) {
- if (socket_desc >= 0) close(socket_desc);
- if (client_sock >= 0) close(client_sock);
- }
- int main(void) {
- struct sockaddr_in server_addr, client_addr;
- char server_message[2000], client_message[2000];
- // Register cleanup function
- atexit(close_socket);
- // Initialize socket descriptors
- socket_desc = -1;
- client_sock = -1;
- // Clean buffers:
- memset(server_message, 0, sizeof(server_message));
- memset(client_message, 0, sizeof(client_message));
- // Create socket:
- socket_desc = socket(AF_INET, SOCK_STREAM, 0);
- if (socket_desc < 0) {
- perror("Error while creating socket");
- exit(EXIT_FAILURE);
- }
- printf("Socket created successfully\n");
- // Set port and IP:
- server_addr.sin_family = AF_INET;
- server_addr.sin_port = htons(2000);
- server_addr.sin_addr.s_addr = INADDR_ANY; // Accept connections on any IP
- // Bind to the set port and IP:
- if (bind(socket_desc, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
- perror("Couldn't bind to the port");
- exit(EXIT_FAILURE);
- }
- printf("Binding successful\n");
- // Listen for clients:
- if (listen(socket_desc, 1) < 0) {
- perror("Error while listening");
- exit(EXIT_FAILURE);
- }
- printf("Listening for incoming connections...\n");
- // Accept an incoming connection:
- socklen_t client_size = sizeof(client_addr);
- client_sock = accept(socket_desc, (struct sockaddr*)&client_addr, &client_size);
- if (client_sock < 0) {
- perror("Can't accept");
- exit(EXIT_FAILURE);
- }
- printf("Client connected at IP: %s and port: %i\n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port));
- // Receive client's message:
- ssize_t recv_size = recv(client_sock, client_message, sizeof(client_message) - 1, 0);
- if (recv_size < 0) {
- perror("Couldn't receive");
- exit(EXIT_FAILURE);
- }
- client_message[recv_size] = '\0'; // Ensure null-termination
- printf("Msg from client: %s\n", client_message);
- // Respond to client:
- strcpy(server_message, "This is the server's message.");
- if (send(client_sock, server_message, strlen(server_message), 0) < 0) {
- perror("Can't send");
- exit(EXIT_FAILURE);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement