Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 50

Сервер TCP

21.12.2013, 16:22. Показов 2930. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задание: Обеспечить перемещение файла по фиксированным частям в несколько открытых соединений по сети. От клиента к серверу. Протокол взаимодействия TCP;
Код клиента:
Кликните здесь для просмотра всего текста
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
78
79
80
81
82
83
84
85
86
87
88
89
#include "stdafx.h"
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdio.h>
#include <iostream>
#include <locale.h>
#include <conio.h>
 
#ifndef UNICODE
#define UNICODE
#endif
 
#define WIN32_LEAN_AND_MEAN
#define DEFAULT_BUFLEN 512
 
using namespace std;
 
// Need to link with Ws2_32.lib
#pragma comment(lib, "ws2_32.lib")
 
int wmain()
{
    setlocale(LC_ALL, "RU");
    //----------------------
    // Initialize Winsock
    WSADATA wsaData;
    int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
    if (iResult != NO_ERROR) {
        wprintf(L"WSAStartup function failed with error: %d\n", iResult);
        return 1;
    }
    //----------------------
    // Create a SOCKET for connecting to server
    SOCKET ConnectSocket;
    ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (ConnectSocket == INVALID_SOCKET) {
        wprintf(L"socket function failed with error: %ld\n", WSAGetLastError());
        WSACleanup();
        return 1;
    }
    //----------------------
    // The sockaddr_in structure specifies the address family,
    // IP address, and port of the server to be connected to.
    sockaddr_in clientService;
    clientService.sin_family = AF_INET;
    clientService.sin_addr.s_addr = inet_addr("127.0.0.1");
    clientService.sin_port = htons(27015);
 
    //----------------------
    // Connect to server.
    char path[MAX_PATH] = {0},
    path1[MAX_PATH] = {0};
 
    cout << "Введите путь к файлу: ";
    cin.getline (path, MAX_PATH);
 
    OemToCharA(path, path1);
    iResult = connect(ConnectSocket, (SOCKADDR *) & clientService, sizeof (clientService));
    if (iResult == SOCKET_ERROR) {
        wprintf(L"connect function failed with error: %ld\n", WSAGetLastError());
        iResult = closesocket(ConnectSocket);
        if (iResult == SOCKET_ERROR)
            wprintf(L"closesocket function failed with error: %ld\n", WSAGetLastError());
        WSACleanup();
        return 1;
    }
    wprintf(L"Connected to server.\n");
    
    iResult = send( ConnectSocket, path1, sizeof(path1), 0 );
    FILE *f;
    fopen_s(&f, path1,"rb");
    while(!feof(f))
    {
        char blockfile[524288] = {0};
        int i = fread(blockfile, sizeof(char), 524288, f);
        iResult=send(ConnectSocket, blockfile, i,0);
    }
    fclose(f);
    remove(path1);
    iResult = closesocket(ConnectSocket);
    if (iResult == SOCKET_ERROR) {
        wprintf(L"closesocket function failed with error: %ld\n", WSAGetLastError());
        WSACleanup();
        return 1;
    }
 
    WSACleanup();
    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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#include "stdafx.h"
#include <winsock2.h>
#include <stdio.h>
#include <windows.h>
#include <iostream>
#include <locale.h>
#include <conio.h>
#ifndef UNICODE
#define UNICODE
#endif
// Need to link with Ws2_32.lib
#pragma comment(lib, "Ws2_32.lib")
#define DEFAULT_BUFLEN 512
 
using namespace std;
 
typedef struct{
    char path[MAX_PATH];
    SOCKET client;
}Data;
 
 
DWORD WINAPI ThreadProc(LPVOID lpParam){
    DWORD dwResult = 0;
    Data *dat=(Data *)lpParam;
 
    int iResult;
    FILE *f;
    fopen_s(&f,dat->path,"wb");
    do
    {
        char blockfile[524288] = {0};
        iResult=recv(dat->client,blockfile,524288,0);
        fwrite(&blockfile,sizeof(char),iResult,f);
    }while(iResult>0);
    fclose(f);
 
    free(dat);
 
    return dwResult;
}
 
int wmain(void)
{
    setlocale(LC_ALL, "RU");
    char recvbuf[DEFAULT_BUFLEN];
    int recvbuflen = DEFAULT_BUFLEN;
    //----------------------
    // Initialize Winsock.
    WSADATA wsaData;
    int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
    if (iResult != NO_ERROR) {
        wprintf(L"WSAStartup failed with error: %ld\n", iResult);
        return 1;
    }
    //----------------------
    // Create a SOCKET for listening for
    // incoming connection requests.
    SOCKET ListenSocket;
    ListenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (ListenSocket == INVALID_SOCKET) {
        wprintf(L"socket failed with error: %ld\n", WSAGetLastError());
        WSACleanup();
        return 1;
    }
    //----------------------
    // The sockaddr_in structure specifies the address family,
    // IP address, and port for the socket that is being bound.
    sockaddr_in service;
    service.sin_family = AF_INET;
    service.sin_addr.s_addr = INADDR_ANY;
    service.sin_port = htons(27015);
 
    if (bind(ListenSocket,(SOCKADDR *) & service, sizeof (service)) == SOCKET_ERROR) {
        wprintf(L"bind failed with error: %ld\n", WSAGetLastError());
        closesocket(ListenSocket);
        WSACleanup();
        return 1;
    }
    //----------------------
    // Listen for incoming connection requests.
    // on the created socket
    if (listen(ListenSocket, 1) == SOCKET_ERROR) {
        wprintf(L"listen failed with error: %ld\n", WSAGetLastError());
        closesocket(ListenSocket);
        WSACleanup();
        return 1;
    }
    //----------------------
    // Create a SOCKET for accepting incoming requests.
    SOCKET AcceptSocket;
    wprintf(L"Waiting for client to connect...\n");
 
    //----------------------
    // Accept the connection.
    char path[MAX_PATH] = {0},
    path1[MAX_PATH] = {0};
 
    cout << "Введите папку: ";
    cin.getline (path, MAX_PATH);
    HANDLE hThread;
    DWORD dwThreadId;
    
    OemToCharA(path, path1);
    
    while(1)
    {
        AcceptSocket = accept(ListenSocket, NULL, NULL);
        wprintf(L"Client connected.\n");
        if (AcceptSocket == INVALID_SOCKET) {
            wprintf(L"accept failed with error: %ld\n", WSAGetLastError());
            closesocket(ListenSocket);
            WSACleanup();
            return 1;
        } else
        wprintf(L"Client connected.\n");
    
        iResult = recv(AcceptSocket, recvbuf, recvbuflen, 0);
        char tmp[MAX_PATH] = {0},tmp1[MAX_PATH] = {0}, tmp2[MAX_PATH]={0};
        _splitpath_s(recvbuf,NULL, NULL,NULL,NULL,tmp,MAX_PATH,tmp1,MAX_PATH);
        strcat_s(tmp,MAX_PATH,tmp1);
        sprintf_s(tmp2, "%s\\%s", path1, tmp);
        Data *dat=new Data();
        dat->client=AcceptSocket;
        strcpy_s(dat->path,tmp2);
        hThread = CreateThread(NULL, 0, ThreadProc, (LPVOID*)dat, 0, &dwThreadId);
        CloseHandle(hThread);
    }
    // No longer need server socket
    closesocket(ListenSocket);
 
    WSACleanup();
    return 0;
}

Проблема в том, что файл исчезает, но не появляется в другой месте. Может кто-нибудь подскажет, что не так?
PS: сервер зависает на: AcceptSocket = accept(ListenSocket, NULL, NULL);
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.12.2013, 16:22
Ответы с готовыми решениями:

как создать TCP клиент, TCP сервер ? На С++
Очень нужна помощь!Как написать TCP клиент, TCP сервер. Например,клиент вводит строку с клавиатуры и отсылает ее серверу.только перед...

Tcp ip клиент-сервер C++ сервер выводит мусор
server # include &lt;sys/types.h&gt; # include &lt;iostream&gt; # include &lt;winsock2.h&gt; # include &lt;stdlib.h&gt; # pragma comment (lib,...

TCP сервер
Написал сервер на Python: from twisted.internet.protocol import Factory, Protocol from twisted.internet import reactor class...

20
Модератор
 Аватар для vxg
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,469
24.12.2013, 19:48
Студворк — интернет-сервис помощи студентам

Не по теме:

Цитата Сообщение от silent_1991 Посмотреть сообщение
С какой такой стати мы должны любое целое значение трактовать как логическое?
мы можем это сделать. потому что это свойство языка о котором идет речь. не какого-нибудь, а именно этого. он может так делать. и мы знаем об этом. если мы знаем язык. в начале в нем вообще не было типа bool. истина это 1, а ложь это 0. не правда ли выглядит весьма естественно?



Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от silent_1991 Посмотреть сообщение
Однако чем сильнее мы себя ограничим явным образом от ошибок - тем лучше будет для нас же самих.
видимо я для себя решил что у меня будет больше ошибок и путаницы если мозги при обнаружении логического выражения сравнения с константой будут обрабатывать его особым образом и выносить ее вперед - пусть лучше обрабатывают все единообразно и не вздумают делать = вместо == вне зависимости от специфики выражения

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.12.2013, 19:48

Tcp Сервер
Реализовать TCP-север, принимающий соединение на заданный порт. После того, как соединение установлено, сервер записывает в файл все...

сервер TCP/IP
нужна помощь по устранению ошибок! #include&lt;stdafx.h&gt; #include &lt;stdio.h&gt; #include &lt;iostream&gt; using namespace std; #include...

TCP/IP клиент и сервер
Сервер # include &lt;sys/types.h&gt; # include &lt;iostream&gt; # include &lt;winsock2.h&gt; # include &lt;stdlib.h&gt; # pragma comment (lib,...

TCP сервер и клиент
Добрый день! Необходимо реализовать TCP сервер, поддерживающий соединения с несколькими клиентами. Сервер должен принимать...

TCP клиент-сервер
Всем привет! Прошу помощи в освоении организации передачи данных по TCP. Если у кого то есть рабочий исходник TCP чата, то было бы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
21
Ответ Создать тему
Новые блоги и статьи
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы Кратко. . .
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru