Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Передача данных клиент-сервер

Добрый день, пытаюсь разобраться с передачей данных клиент-сервер. Вот кое-как по примерам в интернете написал, что нужно, но выдает две ошибки. Подскажите пожалуйста, как исправить.
КЛИЕНТ
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
#include <stdio.h>
#include <winsock2.h>
#include <windows.h>
 
#define MY_PORT 666
 
// макрос для печати количества активных пользователей
#define PRINTNUSERS if (nclients) printf("%d user on-line\n", nclients); \
                else printf("No User on line\n");
 
// прототип функции, обслуживающий подключившихся пользователей
DWORD WINAPI SexToClient(LPVOID client_socket);
 
 
 
 
// глобальная переменная - количество активных пользователей
int nclients = 0;
 
int main(int argc, char* argv[])
{
    char buff[1024]; // Буфер для различных нужд
 
    printf("TCP SERVER DEMO\n");
    if (WSAStartup(0x0202, (WSADATA *)&buff[0]))
    {
        // Ошибка!
        printf("Error WSAStartup %d\n", WSAGetLastError());
        return -1;
    }
 
    SOCKET mysocket;
    if ((mysocket = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    {
        // Ошибка!
        printf("Error socket %d\n", WSAGetLastError());
        WSACleanup(); // Деиницилизация библиотеки Winsock
        return -1;
    }
 
    sockaddr_in local_addr;
    local_addr.sin_family = AF_INET;
    local_addr.sin_port = htons(MY_PORT);
    local_addr.sin_addr.s_addr = 0; // сервер принимает подключения
 
    // вызываем bind для связывания
    if (bind(mysocket, (sockaddr *)&local_addr, sizeof(local_addr)))
    {
        // Ошибка
        printf("Error bind %d\n", WSAGetLastError());
        closesocket(mysocket); // закрываем сокет!
        WSACleanup();
        return -1;
    }
 
    // размер очереди - 0x100
    if (listen(mysocket, 0x100))
    {
        // Ошибка
        printf("Error listen %d\n", WSAGetLastError());
        closesocket(mysocket);
        WSACleanup();
        return -1;
    }
 
    printf("ozidanie podkluceniy...\n");
 
    SOCKET client_socket; // сокет для клиента
    sockaddr_in client_addr; // адрес клиента (заполняется системой)
 
    // функции accept необходимо передать размер структуры
    int client_addr_size = sizeof(client_addr);
 
    // цикл извлечения запросов на подключение из очереди
    while ((client_socket = accept(mysocket, (sockaddr *)&client_addr, \
        &client_addr_size)))
    {
        nclients++;
 
        // пытаемся получить имя хоста
        HOSTENT *hst;
        hst = gethostbyaddr((char *)&client_addr.sin_addr.s_addr, 4, AF_INET);
 
        // вывод сведений о клиенте
        printf("+%s [%s] new connect!\n",
            (hst) ? hst->h_name : "", inet_ntoa(client_addr.sin_addr));
        PRINTNUSERS
 
            DWORD thID;
        CreateThread(NULL, NULL, SexToClient, &client_socket, NULL, &thID);
    }
    return 0;
}
 
DWORD WINAPI SexToClient(LPVOID client_socket)
{
    SOCKET my_sock;
    my_sock = ((SOCKET *)client_socket)[0];
    char buff[20 * 1024];
#define sHELLO "SOCKET PODKLUCHEN\r\n"
 
    // отправляем клиенту приветствие
    send(my_sock, sHELLO, sizeof(sHELLO), 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);
    nclients--; // уменьшаем счетчик активных клиентов
    printf("-disconnect\n"); PRINTNUSERS
 
        closesocket(my_sock);
    return 0;
}
Ошибка 1 error C4996: 'gethostbyaddr': Use getnameinfo() or GetNameInfoW() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings

Сервер
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
#pragma comment(lib, "ws2_32.lib")
#include <stdio.h>
#include <string.h>
#include <winsock2.h>
#include <windows.h>
 
#define PORT 666
#define SERVERADDR "*.*.*.*" //Звёздочками пометил свой IP
 
int main(int argc, char* argv[])
{
    char buff[1024];
    printf("TCP DEMO CLIENT\n");
 
    if (WSAStartup(0x202, (WSADATA *)&buff[0]))
    {
        printf("WSAStart error %d\n", WSAGetLastError());
        return -1;
    }
 
    SOCKET my_sock;
    my_sock = socket(AF_INET, SOCK_STREAM, 0);
    if (my_sock < 0)
    {
        printf("Socket() error %d\n", WSAGetLastError());
        return -1;
    }
 
    // заполнение структуры sockaddr_in - указание адреса и порта сервера
    sockaddr_in dest_addr;
    dest_addr.sin_family = AF_INET;
    dest_addr.sin_port = htons(PORT);
    HOSTENT *hst;
 
    // преобразование IP адреса из символьного в сетевой формат
    if (inet_addr(SERVERADDR) != INADDR_NONE)
        dest_addr.sin_addr.s_addr = inet_addr(SERVERADDR);
    else
    {
        // попытка получить IP адрес по доменному имени сервера
        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_sock);
            WSACleanup();
            return -1;
        }
    }
 
    // адрес сервера получен - пытаемся установить соединение
    if (connect(my_sock, (sockaddr *)&dest_addr, sizeof(dest_addr)))
    {
        printf("Connect error %d\n", WSAGetLastError());
        return -1;
    }
 
    printf("Soedinenie s %s uspeshno ustanovlenno\n \
                       Type quit for quit\n\n", SERVERADDR);
 
    int nsize;
    while ((nsize = recv(my_sock, &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_sock);
            WSACleanup();
            return 0;
        }
 
        send(my_sock, &buff[0], strlen(&buff[0]), 0);
    }
    printf("Recv error %d\n", WSAGetLastError());
    closesocket(my_sock);
    WSACleanup();
    return -1;
}
Ошибка 1 error C4996: 'inet_addr': Use inet_pton() or InetPton() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings
Ответ:
Ошибка 1 error C4996: 'gethostbyaddr': Use getnameinfo() or GetNameInfoW() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings

Ошибка 1 error C4996: 'inet_addr': Use inet_pton() or InetPton() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings
Ну решили проблему, выставьте рабочий код, покажите другим новичкам.

спасибо!
Вопрос: Ошибка в передаче данный, клиент-сервер, пин-понг, теннис

Здравствуйте. Не могу понять, почему и где происходит ошибка. Косячит сама передача данных, клиент подключается к серверу, вроде начинается игра, но сервер молчит, а клиент наигрывается вволю сам с собой и заканчивает игру и только после этого отвисает сервер и начинается прорисовка игры.

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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Design;
using System.Text;
using System.Threading;
using System.Net;
using System.Net.Sockets;
using System.Windows.Forms;
 
namespace TennisDotNetSocket
{
    public partial class Form1 : Form
    {
        public static int Player1 = 0, Player2 =  0;
        public int ID = 0;
        public bool Fx = true;
        public bool Fy = true;
        public int BallX = 20, BallY = 50;
        public bool GameStartEnd = true;
        public bool WinLose = true;
       
 
        public const int RocketX = 15;
        public const int RocketY = 45;
        public const int RadiusBall = 10;
        public const int BallDx = 2;
        public const int BallDy = 2;
        static Thread Th;
        static bool IsServer;
        static long IsWaited = 0;
         static long   IsSended = 0;
        
        
        public Form1()
        {
           
            IsServer = (MessageBox.Show("Ты чЁ  сервер штоле?", "", MessageBoxButtons.YesNo) == DialogResult.Yes);
            InitializeComponent();
            if (IsServer)
            {
                ID = 1;
                toolStripTextBox1.Text = "Server";
                Th = new Thread(new ThreadStart(ServerThread));
            }
            else
            {
                ID = 2;
                toolStripTextBox1.Text = "Klient";
                Th = new Thread(new ThreadStart(ClientThread));
            }
            
        }
        public static void ServerThread()
        {
           
            Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            sock.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 57000));
            sock.Listen(1);
           // this.timer1.Start();
            Socket client = sock.Accept();
            Byte[] data = new Byte[1];
            while (true)
            {
                while (Interlocked.Read(ref IsSended) == 0) {///
                }
                data[0] = Convert.ToByte(Player1);
                client.Send(data, 1, SocketFlags.None);
                              
                Interlocked.Increment(ref IsWaited);
                client.Receive(data, 1, SocketFlags.None);
                Player2 = Convert.ToInt32(data[0]);
                Interlocked.Decrement(ref IsSended);
                Interlocked.Decrement(ref IsWaited);
       
            }
        }
        public static void ClientThread()
        {
            Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            sock.Connect("127.0.0.1", 57000);
            if (!sock.Connected)
            {
                MessageBox.Show("Невозможно подключиться!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                Application.Exit();
            }
           
            Byte[] data = new Byte[1];
            while (true)
            {
                
                Interlocked.Increment(ref IsWaited);
                sock.Receive(data, 1, SocketFlags.None);
                Player1 = Convert.ToInt32(data[0]);
                Interlocked.Decrement(ref IsWaited);
 
 
                while (Interlocked.Read(ref IsSended) == 0) {  }
                data[0] = Convert.ToByte(Player2);
                            
                sock.Send(data, 1, SocketFlags.None);
               
                Interlocked.Decrement(ref IsSended);
            }
        }
 
 
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (MessageBox.Show("Чё Засцал? Да?", "Выход", MessageBoxButtons.YesNo) == DialogResult.No)
                Close();
        }
 
        private void panel1_MouseMove(object sender, MouseEventArgs e)
        {
            switch (ID)
            {
                case 0: 
                { 
                    Player1 = e.Y;
                    Player2 = e.Y;
                    break;
                }
                case 1:
                {
                    Player1 = e.Y;
                    break;
                }
                case 2:
                {
                    Player2 = e.Y;
                    break;
                }
            }
            
        }
 
        private void panel1_Paint(object sender, PaintEventArgs e)
        {
            Graphics gr  = e.Graphics;
            SolidBrush black = new SolidBrush(Color.Black);
            SolidBrush red = new SolidBrush(Color.Red);
            // убираем ракетки
            gr.FillRectangle(black, 0, 0, RocketX, panel1.Height);
            gr.FillRectangle(black, panel1.Width - RocketX, 0, RocketX, panel1.Height);
 
            // рисуем новые ракетки
            gr.FillRectangle(red, 0, Player1, RocketX, RocketY);
            gr.FillRectangle(red, panel1.Width - RocketX, Player2, RocketX, RocketY);
 
            // убираем шарик
            gr.FillRectangle(black, RocketX, 0, panel1.Width - 2 * RocketX, panel1.Height);
 
            // рисуем новый шарик
            gr.FillEllipse(red, BallX, BallY, RadiusBall, RadiusBall);
        }
 
        public void timer1_Tick(object sender, EventArgs e)
        {
            #region // Если конец игры
 
            if (((BallX - RadiusBall) <= 0) || ((BallX + RadiusBall) >= panel1.Width))
                {
                    GameStartEnd = false;
                    timer1.Stop();
                    MessageBox.Show("Игра окончена");
                    if (ID == 0) MessageBox.Show("Как бэ конец...и проиграли, и победили...");
                    if (BallX - RadiusBall < RocketX)
                    {
                        if (ID == 1)
                            MessageBox.Show("Вы проиграли");
                        if (ID == 2)
                            MessageBox.Show("Ура! Вы победили!");
                    }
                        if (BallX + RadiusBall > panel1.Width - RocketX)
                        {
                            if (ID == 2)
                                MessageBox.Show("Вы проиграли");
                            if (ID == 1)
                                MessageBox.Show("Ура! Вы победили!");
                        }
                }
            #endregion
            #region Если продолжаем играть
            if (GameStartEnd != false)
            {
                // попадание в ракетку игрока 1
                if(((BallY - RadiusBall) <= Player1 + RocketY) && ((BallY + RadiusBall) >= Player1))
                {
                    if ((BallX - RadiusBall) <= RocketX)
                        Fx = true;
                }
                // попадание в ракетку игрока 2
                if (((BallY - RadiusBall) <= Player2 + RocketY) && ((BallY + RadiusBall) >= Player2))
                {
                    if ((BallX + RadiusBall) >= (panel1.Width - RocketX))
                        Fx = false;
                }
 
                // попадание вверхнюю границу
                if ((BallY - RadiusBall >= 0) && (BallY - RadiusBall < 2))
                    Fy = true;
                // попадание нижнюю границу
                if ((BallY + RadiusBall > panel1.Height - 2) && (BallY + RadiusBall <= panel1.Height))
                    Fy = false;
 
                // перераспределение координат для шарика
                if (Fx == true)
                    BallX += BallDx;
                else BallX -= BallDx;
                if (Fy == true)
                    BallY += BallDy;
                else BallY -= BallDy;
 
                toolStripTextBox2.Text = BallX + ":" + BallY;
                panel1.Refresh();
            }
            #endregion
        }
 
        private void игратьToolStripMenuItem_Click(object sender, EventArgs e)
        {            timer1.Start();                  }
        private void подключитьсяToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Th.Start();
            игратьToolStripMenuItem.Enabled = true;
            
        }
 
        private void Form1_Load(object sender, EventArgs e)       {        }
        
    }
}
Ответ: А как к самому себе подключиться? Как запустить с одного компьютера? Запускаю программу, далее появляется окошко, в нём прописаны IP и порт, нажимаю ОК, затем Играть, далее появляется окошко с выбором сервер ты или клиент, далее появляется окно с самой игрой, но в нём игра не начинается, нужно ещё подключиться другому игроку, с другой стороны, но как это сделать с одной машины? Что не прописываю ничего не подходит..
Вопрос: аякс передача файлов на сервер с помощью FormData

всем привет, пытаюсь разобраться с передачей файлов аякс с помощью FormData вот код:
CODE (javascript):

  1.  
  2. $('.alpha_save').click(function(){
  3. var formData = new FormData($('#out_form')[0]);
  4.        
  5. $.ajax({
  6.       type: "POST",
  7.       processData: false,
  8.       contentType: false,
  9.       url: "alpha.php?Save",
  10.       data:  formData
  11.       })
  12.       .done(function( data ) {
  13.        
  14.           $('#save_result').html(data);
  15.                        
  16.       });
  17.  });

CODE (html):

  1.  
  2. <form  method="post" action="" enctype="multipart/form-data" id="out_form">
  3. <input type="file" name="file"/>
  4. </form>
  5. <button class="alpha_save" type="button">Сохранить</button>
  6.  

при нажатии сохранить кнопки ничего в файл alpha.php не попадает массив $_FILES пуст, что я не так делаю подскажите плиз?

(Отредактировано автором: 12 Октября, 2015 - 19:36:42)

Ответ:
Tyoma5891, можно еще попробовать без jQ слать файлы, я только так делал.
Но сюдя по телу запроса вроде все норм - должно быть
Вопрос: Передача файлов на сервер через компонент IdHTTP

Доброе время суток. 
Меня интересует как отправить файл на сервер и/или сайт, посредством компонента IdHTTP, а конкретнее его методов Put или Post. Без использования скриптов на принимающей стороне. 
Ответ:
Цитата(Illusion Dolphin @  24.11.2014,  09:50 )
может поделитесь текстом ошибки? 

Текст ошибки не помню (нужно снова набирать), но она появляется когда пытаюсь загрузить файл больше нескольких килобайт. А когда файл весит не больше, не просходит вообще ничего. Компилирую, нажимаю на кнопку - программа молчит, а файл на сайте не появляется. 
Вопрос: Запустить скрипт для передачи файла на сервер

клиентский и серверный скрипт для передачи файла от

клиента к серверу через интернет.

Считаем что клиент и сервер в интернете имеют прямые ИП адреса и свободно

доступны извне. Подскажите как реализовать или может кто делал подобное.
Ответ:

Там можешь прочитать про flask, django, pyramid, bottle и т д
Вопрос: Доколе?? Передача файла в Web API

Крик души - почему банальная передача файла с сервера на клиент требует какого низкоуровневого кода размером в простыню??
Ответ: Чёт не понял. Файл он уже есть, или в процесе создания передаётся? В первом случае - вообще серверу делать нечего. А во втором случае, ну да, три строчки добавить нужно на выхлоп.
Вопрос: Передача данных, клиент-сервер по интернету

Здравствуйте,
простой чат на основе Winsock, не работает через интернет, т.е. данные только от клиента серверу передаются без ошибок и без особой задержки, а обратно или с большой задержкой или вообще теряются. По локалке всё работает без проблем. Порты в рутере открыты, Norton IS пробовал полностью выключать, не помогает, всё равно где-то, что-то блокирует передачу данных.
Заранее спасибо.
Ответ: Грот, Спасибо, уже разобрался, проблема была в настройках роутера.
Вопрос: Передача файла на сервер

Необходимо передать файл на сервер.

контракт

IContract.cs
C#
1
2
3
4
5
6
7
8
9
namespace SendFile
{
    [ServiceContract]
    interface IContract
    {
        [OperationContract]
        void Say(byte[] array );
    }
}
Сервис

Service.cs

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
namespace ReciveFile
{
    class Service : IContract
    {
        public void Say(byte[] array,string name)
        {
            FileStream fstream1 = new FileStream(Environment.CurrentDirectory + "\\tmp"+name  , FileMode.Append, FileAccess.Write);
            fstream1.Write(array,0,array.Length);
            fstream1.Flush();
            fstream1.Close();
 
        }
 
    }
Клиент

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
   public partial class Send : Form
    {
        int parts = 100000;
 
        long diff, len, colbytes = 0;
 
        string s, s1 = "";
 
        // Указание, где ожидать входящие сообщения.
        Uri address = new Uri("http://localhost:4000/IContract");
 
        // Указание, как обмениваться сообщениями.
        BasicHttpBinding binding = new BasicHttpBinding();
 
        // Ссылка на экземпляр ChannelFactory<T>, где Т - Контракт.
        ChannelFactory<IContract> factory;
 
        // Ссылка на канал (прокси).
        IContract channel;
 
        public Send()
        {
            InitializeComponent();
        }
 
        private void Send_Load(object sender, EventArgs e)
        {
            binding.MaxBufferPoolSize = 2147483647;
            binding.MaxBufferSize = 2147483647;
            binding.MaxReceivedMessageSize = 2147483647;
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
 
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                FileInfo file = new FileInfo(openFileDialog1.FileName);
                len = file.Length;
                textBox1.Text = "Размер файла: " + Convert.ToString(len / (1024)) + " кбайт " + Environment.NewLine + openFileDialog1.FileName;
 
            }
 
 
 
        }
 
 
 
        private void button2_Click(object sender, EventArgs e)
        {
 
            s = Path.GetFileNameWithoutExtension(openFileDialog1.FileName);
            s1 = Path.GetExtension(openFileDialog1.FileName);
            colbytes = (long)Math.Round((decimal)len / parts);
            diff = len - (parts * colbytes);
 
            try
            {
                if (factory == null)
                {
                    // Создание экземпляра ChannelFactory<T>, где Т - Контракт.
                    factory = new ChannelFactory<IContract>(binding, new EndpointAddress(address));
 
                    // Использование factory для создания канала (прокси).
                    channel = factory.CreateChannel();
                }
 
                if (factory != null && channel != null)
                {
 
 
                    // Использование channel (прокси) для отправки сообщения получателю.
                    for (int i = 0; i < parts;i++ )
                    {
                        FileStream fstream = File.OpenRead(openFileDialog1.FileName);
                        byte[] array = new byte[colbytes];
                        fstream.Read(array, 0, array.Length);
                        fstream.Seek(i + 1, SeekOrigin.Begin);
                        fstream.Flush();
                        fstream.Close();
// Использование channel (прокси) для отправки сообщения получателю.
                        channel.Say(array,s+s1);
                    }
 
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
 
        
 
 
 
    }


и вот какую ошибку выдает.


подскажите , пожалуйста, в чем дело?
Ответ:
Сообщение от Алексей228
подскажите
В первую очередь, сделайте то, что сказано в имеющейся ошибке, чтобы увидеть, что нужно исправить.
Ну и как я предполагаю, вам нужно на обоих концах установить свойство ReaderQuotas у привязки.
Вопрос: Простой клиент-сервер на сообщениях (ошибка в подключении библиотеки)

Здравствуйте.
Сразу скажу, что писать что-то и т.д не прошу! Просто помогите понять в чем ошибка.
Переписал книжный пример клиент-сервера из Терренс Чана.

Код сервера:
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
#include <strstream.h>
#include "message.h"
#include <string.h>
#include <signal.h>
 
int main()
{
    int len, pid, cmdId;
    char buf[256];
    time_t tim;
 
    /*настроить этот процесс как демон*/
    for(int i=0; i<20; i++) signal(i, SIG_IGN);
    setsid();
    cout << "server: start executing...\n" << flush;
    message mqueue(MSGKEY); // открыть очередь сообщений
    if (!mqueue.good()) exit(1); // выйти из проги если очередь не      открывается
    
    /*ожидать запрос от клиента*/
    while(len = mqueue.rcv(buf, sizeof(buf), -99, &cmdId)>0)
    {
        /*получить идентификатор процесса клиента и проверить его           достоверность*/
        istream(buf, sizeof(buf))>>pid;
        if (pid<100)
        {
            cerr << "Illegal PID: " << buf << "/"<< pid<< endl;
            continue;
        }
        /*подготовить ответ клиенту */
        cerr << "server: receive cmd #" << cmdId << ", from                                     client" << pid << endl;
        switch(cmdId)
        {
            case LOCAL_TIME:    
                tim = time(0);
                strcpy(buf, ctime(&tim));
            break;
            case UTC_TIME:
                tim = time(0);
                strcpy(buf, asctime(gmtime(&tim)));
            break;
            case QUIT_CMD:
                cerr << "server: deleting msg queue...\n";
                return mqueue.rmQ();
            default: /*послать клиенту сообщение об ошибке*/
                ostrstream(buf, sizeof(buf)) << "Illegal                            cmd:"<<cmdId<<'\0';
        }
        /*послать клиенту ответ*/
        if (mqueue.send(buf, strlen(buf)+1, pid) == -1)
        cerr << "Server: "<<getpid() << "send response fails\n";
    
    }
    return 0;
    
}
Выдает ошибку в самом начале
strstream.h: Нет такого файла или каталога

Пробовал Заменить на:

C++
1
2
3
#include <strstream>
#include <sstream.h>
#include <sstream>
Результат один и тот же.
Клиент сервер - состоит из 3-х файлов: клиент, сервер и message.h (класс сообщений) - если нужно то их код тоже напишу.
Ответ: bizba
Anonymous, поищите для начала файл strstream* в /usr/include.
Привет. Проблему с <strstream> решил.
Нужно было компилировать с помощью g++, а не gcc - но там все равно - ошибок куча.
Вопрос: Передача файла на сервер методом POST

Потолок: .Net 4.0
Идея: передать файл методом POST на сервер скрипту.
Что есть:
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
        public string ZAGPyZKA_FAiLA(string FAiL, string id0, string DELO = "BblPBu_GLAZ_PyLuT")
        {
            //Дело - картинка объявления.
            // 1
            string GOPOD = _HACTPOiKu["GOPOD"];
            string ATU = "GOPOD=" + GOPOD + "|email="+ _HACTPOiKu["email"] +"|id="+ id0 + "|DELO=" + DELO;
            StringBuilder sb = new StringBuilder();
            sb.AppendLine("------WebKitFormBoundaryFQyoiBAmgWBjjIyg");
            sb.AppendLine("Content-Disposition: form-data; name="X-Client-Version"");
            sb.AppendLine("");
            sb.AppendLine("");
            sb.AppendLine("1.0.00");
            sb.AppendLine("------WebKitFormBoundaryFQyoiBAmgWBjjIyg");
            sb.AppendLine("Content-Disposition: form-data; name="X-Client-Type"");
            sb.AppendLine("");
            sb.AppendLine("API");
            sb.AppendLine("------WebKitFormBoundaryFQyoiBAmgWBjjIyg");
            sb.AppendLine("Content-Disposition: form-data; name="X-Api-Version"");
            sb.AppendLine("");
            sb.AppendLine("1.0");
            sb.AppendLine("------WebKitFormBoundaryFQyoiBAmgWBjjIyg");
            sb.AppendLine("Content-Disposition: form-data; name="X-Authorization"");
            sb.AppendLine("");
            sb.AppendLine(ATU);
            sb.AppendLine("");
            sb.AppendLine("------WebKitFormBoundaryFQyoiBAmgWBjjIyg");
            sb.AppendLine("Content-Disposition: form-data; name="Accept"");
            sb.AppendLine("");
            sb.AppendLine("application/json");
            sb.AppendLine("------WebKitFormBoundaryFQyoiBAmgWBjjIyg");
            sb.AppendLine("Content-Disposition: form-data; name="KAPTuHKA"; filename="" + System.IO.Path.GetFileName(FAiL) + """);
            //sb.AppendLine("Content-Type: application/octet-stream");
            sb.AppendLine("Content-Type: image/"+ System.IO.Path.GetExtension(FAiL));
            sb.AppendLine("");
 
            byte[] nach = Encoding.ASCII.GetBytes(sb.ToString());
            byte[] str = File.ReadAllBytes(FAiL);
            byte[] stri = Encoding.ASCII.GetBytes(Environment.NewLine);
            byte[] str2 = Encoding.ASCII.GetBytes("------WebKitFormBoundaryFQyoiBAmgWBjjIyg--");
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(_HACTPOiKu["CKPunT"]);
            request.CookieContainer = new CookieContainer();
            request.Accept = "application/json";
            request.ServicePoint.Expect100Continue = false;
            request.Referer = "http://ya.ru";
            request.ContentType = "multipart/form-data; boundary=----WebKitFormBoundaryFQyoiBAmgWBjjIyg";
            request.UserAgent = " Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36";
            request.AllowAutoRedirect = true;
            //  request.Proxy = new WebProxy("84.27.75.236:39460");
            request.Host = _HACTPOiKu["CAiT"];
            request.KeepAlive = true;
            
            request.TransferEncoding = "";
 
            request.Headers.Add("X-Requested-With: XMLHttpRequest");
            request.Headers.Add("X-Api-Version: 1.0");
            request.Headers.Add("X-Client-Version: 1.0.00");
            request.Headers.Add("X-Authorization: " + ATU);
            request.Headers.Add("X-Client-Type: API");
            request.Headers.Add("Accept-Encoding: gzip,deflate,sdch");
            request.Headers.Add("Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4");
            
            request.Method = "POST";
 
            request.ContentLength = nach.Length + str.Length + str2.Length + stri.Length;
            using (Stream requestStream = request.GetRequestStream())
            {
                requestStream.Write(nach, 0, nach.Length);
                requestStream.Write(str, 0, str.Length);
                requestStream.Write(stri, 0, stri.Length);
                requestStream.Write(str2, 0, str2.Length);
                requestStream.Close();
            }
            try
            {
                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    response.Cookies = request.CookieContainer.GetCookies(request.RequestUri);
                    if (response.Cookies != null)
                    {
                        //Cooks.Add(response.Cookies);
                    }
                    var s = request.GetResponse();
                    //return getLink(System.IO.Path.GetFileName(FAiL));
                    return (FAiL);
                }
            }
            catch (WebException e)
            {
                return "" + e;
            }
}
Затруднение: я не знаю почему картинку мой скрипт(на PHP) на сервере, не ложит в директорию(что в нём указано) картинку, что я ему сую. Да и как вообще узнать: что мой скрипт ответил на запрос закачки картинки?
Смотрел:
var s = request.GetResponse();
- ненашёл строки "что выплёвывает мой скрипт". Что мне надо смотреть?

П.с.: ещё вопрос: как передать в переменной "ATU" русские буквы так, чтобы они передавались на сервер. У меня ругается "не допустимые символы"?

Добавлено через 27 минут
Если имеет значение: на сервере, массивы $_SERVER и $_FILES не пустые(в них инфа об соединении с свервером). Т.е. файл на сервер попадает.

Добавлено через 19 часов 37 минут
Что? Нет возможности узнать "что мне скрипт ответил на попытку закачать файл"?

Добавлено через 34 секунды
Может я выбрал(нашёл) неправильный способ реализации?
Ответ:

Не по теме:

47911, тебя прёт, что ли, таким стилем сущности именовать?