Новичок
Профиль
Группа: Участник
Сообщений: 4
Регистрация: 12.4.2010
Репутация: нет Всего: нет
|
Код | #include <windows.h> #include <stdio.h> #include <conio.h> #include <tchar.h>
#pragma comment (lib, "ws2_32.lib") #pragma comment (lib, "mswsock.lib")
void main(void) { char PCName [30], ClientName[30], Message[200]; WSAData WSADat; // Свойства WinSock (результат функции WSAStartup) sockaddr_in sin; // Свойства(адрес) создаваемого сокета SOCKET Sock, Client; // Серверный и клиентский сокеты
WSAStartup(0x0202,&WSADat); // Инициализация WinSock // 0x0202 - версия WinSock. Может быть 1.0, 1.1, 2.0, 2.2 // WSADat - структура, куда будут занесены рез. инициализации gethostname(PCName, 30); // Получение имени текущего ПК
sin.sin_family = AF_INET; // Тип адреса sin.sin_addr.s_addr = 0; // IP-адрес сервера (пори создании сервера можно 0) sin.sin_port = htons(2803); // Номер порта сервера Sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // Создание сокета bind(Sock, (sockaddr*)&sin, sizeof(sin)); // Связывание созданного сокета с адресом sin
// ***** Ожиданеи клиента printf("Wait of client...\n"); listen(Sock, SOMAXCONN); // Прослушивание сокета сервером (для подключения клиента) Client = accept(Sock, (sockaddr*)&sin, 0); // Ожидание клиента recv(Client, ClientName, 30, 0); // Получение имени компьютера клиента send(Client, PCName, strlen(PCName) + 1, 0); // Отправка имени этого компьютера (сервера)
printf("Client ( \"%s\" ) has connected!\n", ClientName);
// ***** Меню int Menu; do { printf("1. Send message;\n"); printf("2. Get Message;\n"); printf("3. Quit;\n");
printf("Make your selection: "); scanf_s("%i", &Menu);
switch (Menu) { case 1: // Отправка сообщения клиенту printf("Enter message: "); scanf_s("%199s", Message, 200); if (send(Client, Message, strlen(Message) + 1, 0) != SOCKET_ERROR)printf("Sent!\n"); else printf("Error of sending!\n"); break; case 2: // Приём сообщения от клиента if (recv(Client, Message, 200, 0) != SOCKET_ERROR) { printf("%s\n", Message); _gettch(); } else printf("Error of getting!\n"); break; };
printf("\n"); } while (Menu != 3);
// Закрытие сокетов и окончание работы с WinSock closesocket(Sock); closesocket(Client); WSACleanup(); _gettch(); }
|
Есть сервер, который принимает только одного клиента, как сделать чтоб он мог принимать нескольких клиентов?? Код | //Вот клиент, если кому нужен #include <windows.h> #include <stdio.h> #include <conio.h> #include <tchar.h>
#pragma comment (lib, "ws2_32.lib") #pragma comment (lib, "mswsock.lib")
void main(void) { char PCName[30], ServerName[30], Message[200], IP[16] = { 0 }; WSAData WSADat; // Свойства WinSock (результат функции WSAStartup) sockaddr_in sin; // Свойства(адрес) создаваемого сокета SOCKET Sock; // Клиентский сокет
// Ввод IP-адреса сервера printf("Enter server's IP: "); scanf_s("%15s", IP, 16);
WSAStartup(0x0202, &WSADat); // Инициализация WinSock // 0x0202 - версия WinSock. Может быть 1.0, 1.1, 2.0, 2.2 // WSADat - структура, куда будут занесены рез. инициализации gethostname(PCName, 30); // Получение имени текущего ПК
sin.sin_family = AF_INET; // Тип адреса sin.sin_addr.s_addr = inet_addr(IP); // IP-адрес сервера (пори создании сервера можно 0) sin.sin_port = htons(2803); // Номер порта сервера
Sock = socket(AF_INET, SOCK_STREAM, 0); // Создание сокета
// ***** Подключение к серверу printf("Connecting to server...\n");
if (connect(Sock, (sockaddr*)&sin, sizeof(sin)) == SOCKET_ERROR) { printf("Connection error!\n"); goto End; } send(Sock, PCName, strlen(PCName) + 1, 0); // Отправка имени этого компьютера (клиента) recv(Sock, ServerName, 30, 0); // Получение имени компьютера сервера
printf("Connected to \"%s\"!\n", ServerName);
// ***** Меню int Menu; do { printf("1. Send message;\n"); printf("2. Get Message;\n"); printf("3. Quit;\n");
printf("Make your selection: "); scanf_s("%i", &Menu);
switch (Menu) { case 1: // Отправка сообщения серверу printf("Enter message: "); scanf_s("%199s", Message, 200); if (send(Sock, Message, strlen(Message) + 1, 0) != SOCKET_ERROR) printf("Sent!\n"); else printf("Error of sending!\n"); break; case 2: // Приём сообщения от сервера if (recv(Sock, Message, 200, 0) != SOCKET_ERROR) { printf("%s\n", Message); _gettch(); } else printf("Error of getting!\n"); break; };
printf("\n"); } while (Menu != 3);
End:
// Закрытие сокетов и окончание работы с WinSock closesocket(Sock); WSACleanup(); _gettch(); }
|
Это сообщение отредактировал(а) CsandeRR - 16.5.2010, 19:53
|