Форум программистов, компьютерный форум CyberForum.ru

Создание эхо сервера - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вычислить сумму отрицательных элементов массива, упорядочить массив http://www.cyberforum.ru/cpp-beginners/thread659812.html
Задание: В одномерном массиве,состоящем из N вещественных элементов, вычислить сумму отрицательных элементов массива. Упорядочить элементы массмва по возрастанию методом "пузырька". Для ввода, вывода, обработки и упорядочения массива использовать функции.
C++ Описать структуру с именем Worker Нужно написать программу на языке С или C++ на борланде. Задание: Описать структуру с именем Worker содержащую следующие поля: • Фамилия и имя; • Должность; • год поступления на работу; Написать программу, которая выполняет следующие действия: 1)Ввод с клавиатуры данных в массив,состоящий из 10ти элементов типа WORKER/ 2)Вывод на экран фамилии работников,чей стаж работы превышает... http://www.cyberforum.ru/cpp-beginners/thread659809.html
C++ Работа с директориями
Не пойму что я делаю не так... #include <iostream> #include <windows.h> #include <io.h> #include <stdio.h> #include <direct.h> #include <locale> using namespace std; int main() {
Как составить строку для вывода C++
WinAPI. Надо вывести сообщение через MessageBox(hWnd,L"Local group name:" ,L"Info",MB_OK); но к L"Local group name:"(он WCHAR) хочу добавить buf_ptr->lgrpi1_name(он LPWSTR). Если делаю вот так MessageBox(hWnd,L"Local group name:" + buf_ptr->lgrpi1_name ,L"Info",MB_OK); пишет error C2110: '+' : cannot add two pointers. Помогите составить строку.
C++ Компилятор не видит объявление класса http://www.cyberforum.ru/cpp-beginners/thread659796.html
//Cperson.h #pragma once #include "variables.h" #include "Caudio.h" #include "Cblock.h" #include <vector> enum part{DOWN, UP, LEFT, RIGHT}; class Cperson {
 

Показать сообщение отдельно
Aldragon
2 / 2 / 0
Регистрация: 28.09.2012
Сообщений: 34
28.09.2012, 17:44     Создание эхо сервера
Здравствуйте, извините, если ошибся с разделом форума. Помогите, пожалуйста, разобраться с кодом сервера и клиента. И еще раз извиняюсь, так как код очень быдловский(еще в процессе редактирования и переписывания под себя, исходник взят из статьи Касперски). В общем-то вопрос всего один: какая часть кода отвечает за размер сообщения (передается около 30 символов, лень считать точнее).
Код сервера:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#define MYPORT 201
#define HELLO_USER "Hello, User! Server wish you all good!"
#define PRINTONLINE if (Number_Clients) cout << "User Online:" << Number_Clients << endl; else cout <<"No User online" << endl;
 
using namespace std;
 
int Number_Clients;
 
DWORD WINAPI MessageToClient(LPVOID client_socket){
    SOCKET My_Sock;
    My_Sock=((SOCKET *) client_socket)[0];
    char buff[20*1024];
    send(My_Sock, HELLO_USER, sizeof(HELLO_USER),0);
    int bytes_recv;
    while((bytes_recv = recv(My_Sock,&buff[0],sizeof(buff),0)) && (bytes_recv != SOCKET_ERROR)){
        send(My_Sock,&buff[0],bytes_recv,0);
    }
    Number_Clients--;
    cout << "Disconnect" << endl;
    PRINTONLINE;
    closesocket(My_Sock);
return 0;
}
 
int main(int argc, char** argv) {
    cout << "Server TCP" << endl << endl;
    char buf[1024];
    int flag = WSAStartup(0x0202,(WSADATA *) &buf[0]);
    if (flag){
        cout << "Error of startup libory" << endl;
        return (-1);
    }
 
    SOCKET MySocket = socket(AF_INET, SOCK_STREAM, 0);
    if(MySocket < 0){
       WSACleanup();
       cout << "Error of create socket" << endl;
       return (-1);
    }
 
    sockaddr_in Local_Addr;
    Local_Addr.sin_family = AF_INET;
    Local_Addr.sin_port = htons(MYPORT);
    Local_Addr.sin_addr.s_addr = 0;
 
    flag = bind(MySocket,(sockaddr *) &Local_Addr, sizeof(Local_Addr));
    if (flag) {
        cout << "Error of bind: " << WSAGetLastError() << endl;
        closesocket(MySocket);
        WSACleanup();
        return(-1);
    }
 
    flag = listen(MySocket, 0x100);
    if (flag) {
        cout << "Error of listen: " << WSAGetLastError() << endl;
        closesocket(MySocket);
        WSACleanup();
        return(-1);
    }
    cout << "Connect. Plaese wait" << endl;
 
    SOCKET Client_Socket;
    sockaddr_in Client_Addr;
    int Client_Addr_Size = sizeof(Client_Addr);
 
    while(Client_Socket = accept(MySocket, (sockaddr *) &Client_Addr, &Client_Addr_Size)){
        Number_Clients++;
        HOSTENT *hst;
        hst=gethostbyaddr((char *) &Client_Addr.sin_addr.s_addr,4,AF_INET);
        cout << "New Connect" << endl <<( (hst) ? hst->h_name : "" ) << inet_ntoa(Client_Addr.sin_addr) << endl;
        PRINTONLINE;
        DWORD thID;
        CreateThread(NULL, NULL, MessageToClient, &Client_Socket, NULL, &thID);
    }
    return 0;
}
Клиент:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include "stdafx.h"
#include <iostream>
#include <winsock2.h>
#include <string.h>
 
 
#define PORT 201
#define SERVERADDR "127.0.0.1"
 
using namespace std;
 
int main(int argc, CHAR* argv[]){
    cout << "TCP - Client" << endl << endl;
    char buff[20*1024];
    int flag = WSAStartup(0x0202,(WSADATA *) &buff[0]);
    if (flag){
        cout << "Error of startup libory" << endl;
        WSACleanup();
        return (-1);
    }
 
    SOCKET My_Socket = socket(AF_INET, SOCK_STREAM, 0);
    if(My_Socket < 0){
       WSACleanup();
       cout << "Error of create socket" << endl;
       return (-1);
    }
 
    sockaddr_in Dest_Addr;
    Dest_Addr.sin_family = AF_INET;
    Dest_Addr.sin_port = htons(PORT);
    HOSTENT *hst;
    if (inet_addr(SERVERADDR)!=INADDR_NONE){
        Dest_Addr.sin_addr.s_addr=inet_addr(SERVERADDR);
    }
    else{
        if (hst=gethostbyname(SERVERADDR)){
            ((unsigned long *)&Dest_Addr.sin_addr)[0]=((unsigned long **)hst->h_addr_list)[0][0];
        }
        else{
            printf("Invalid address %s\n",SERVERADDR);
            closesocket(My_Socket);
            WSACleanup();
            return (-1);
        }
    }
    flag = connect(My_Socket,(sockaddr *)&Dest_Addr,sizeof(Dest_Addr));
    if (flag){
        printf("Connect error %d\n",WSAGetLastError());
        return (-1);
    }
    printf("Connection successful. Type quit for quit\n\n",SERVERADDR);
    int nsize;
    while((nsize=recv(My_Socket,&buff[0],sizeof(buff)-1,0))!=SOCKET_ERROR){
        buff[nsize]=0;
        printf("S=>C:%s",buff);
        printf("S<=C:"); 
        fgets(&buff[0],sizeof(buff)-1,stdin);
        if (!strcmp(&buff[0],"quit\n")){
            printf("Exit...");
            closesocket(My_Socket);
            WSACleanup();
            return 0;
        }
        send(My_Socket,&buff[0],nsize,0);
    }
    printf("Recv error %d\n",WSAGetLastError());
    closesocket(My_Socket);
    WSACleanup();
    return (-1);
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 15:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru