Тема: Sms-флуд
Показать сообщение отдельно

  #28  
Старый 20.07.2005, 08:40
silveran
Постоянный
Регистрация: 02.05.2005
Сообщений: 786
Провел на форуме:
807041

Репутация: 263


Отправить сообщение для silveran с помощью ICQ
По умолчанию

2.2 Сервер.
Простейшая реализация TCP/IP сервера может быть представлена следующим кодом (socktest.c):


--------------------------------------------------------------------------------

#ifdef _WIN32
#include <winsock.h>
#else
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <netdb.h>
typedef struct sockaddr SOCKADDR;
typedef struct sockaddr_in SOCKADDR_IN;
#define SOCKET_ERROR -1
#define INVALID_SOCKET -1
#define closesocket(s) close(s)
#endif /* _WIN32 */


#include <stdio.h>
int main(int argc, char** argv)
{
SOCKADDR_IN sockaddr;
SOCKADDR_IN descr;
int addr_len = sizeof(SOCKADDR_IN);

#ifdef _WIN32
SOCKET sock;
SOCKET newsock;
WSADATA WSAData;

/* Startup socket library */
if (WSAStartup(MAKEWORD(1,1), &WSAData) != 0)
perror("Can't initialize socket library");
#else
int sock;
int newsock;
#endif /* _WIN32 */

/* create socket */
sock = socket(PF_INET, SOCK_STREAM, 0);

if (sock == INVALID_SOCKET) {
perror("Can't open socket");
return 1;
}

/* filling up sockaddr structure */
sockaddr.sin_family = AF_INET;
sockaddr.sin_addr.s_addr = INADDR_ANY;
sockaddr.sin_port = htons(8100);

/* bind socket */
if (bind(sock, (const SOCKADDR *)&sockaddr, sizeof(SOCKADDR_IN))) {
perror("Can't bind socket");
closesocket(sock);
return 1;
}

/* start listening */
if (listen(sock, 1) == SOCKET_ERROR) {
perror("Can't start listening");
closesocket(sock);
return 1;
}
else {
/* accept connection (note that accept() is the blocking call) */
newsock = accept(sock, (SOCKADDR *)&descr, &addr_len);
if (newsock != INVALID_SOCKET) {
printf("Connection is accepted. Peer: %s\n", inet_ntoa(descr.sin_addr));
if (send(newsock, "Hello from server",
strlen("Hello from server"), 0) == SOCKET_ERROR)
perror("Send operation failed");
}
else
perror("Can't accept connection");
closesocket(sock);
closesocket(newsock);
}

return 0;
}