// server.c
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netdb.h>
int main(int argc, char *argv[])
{
int socket_desc, new_socket, c;
struct sockaddr_in server, client;
char *message;
char *client_ip;
int client_port;
// Create socket
socket_desc = socket(AF_INET, SOCK_STREAM, 0);
if (socket_desc == -1) {
printf("Could not create socket\n");
}
// Prepare the sockaddr_in structure
server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY;
server.sin_port = htons(8888);
// Bind
if (bind(socket_desc, (struct sockaddr *)&server, sizeof(server)) < 0) {
puts("bind failed");
}
puts("bind done");
// Listen
listen(socket_desc, 3);
// Accept and incoming connection
puts("Waiting for incoming connections ...");
c = sizeof(struct sockaddr_in);
while (new_socket = accept(socket_desc, (struct sockaddr *)&client, (socklen_t *)&c)) {
puts("Connection accepted");
// Get the ip address and the port number of connected client
client_ip = inet_ntoa(client.sin_addr);
client_port = ntohs(client.sin_port);
printf("Connected client ip : %s\n", client_ip);
printf(" port : %d\n", client_port);
// Reply to the client
message = "Hello Client, I have received your connection. But I have to go now, bye.\n";
write(new_socket, message, strlen(message));
}
if (new_socket < 0) {
perror("accept failed");
return 1;
}
return 0;
}
原文:http://www.binarytides.com/socket-programming-c-linux-tutorial/