Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# .NET

Войти
Регистрация
Восстановить пароль
 
WizarД
53 / 56 / 2
Регистрация: 07.02.2011
Сообщений: 556
Записей в блоге: 1
#1

Добавление байтов при создании сокета - C#

31.08.2011, 14:04. Просмотров 534. Ответов 1
Метки нет (Все метки)

Читаю книгу dotNET Сетевое программирование для профессионалов,но то,что мне нужно я не нашел(нашел почти все,что нужно но некоторых вещей нет)
Устанавливаю соединение с сервером, далее нужно отправить пакет, заканчивающийся на 0A 00
Вот мой код:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 IPHostEntry ipHOST = Dns.Resolve("62.146.190.34");
            IPAddress ipaddr = ipHOST.AddressList[0];
            IPEndPoint ipEP = new IPEndPoint(ipaddr, 8080);
 
            Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            sender.Connect(ipEP);
            Console.WriteLine("Socket подключился к {0}", sender.RemoteEndPoint.ToString());
            string whyME = "LOGIN|35055730|7ba003de04cf97ee3c7844c259c672ed|4.3.1..PNG";
            byte[] msg = Encoding.ASCII.GetBytes(whyME);
                      
            int bytessend = sender.Send(msg);
 
            int bytesRec = sender.Receive(whToSend);
            Console.WriteLine("Сервер ответил: {0}", Encoding.ASCII.GetString(whToSend, 0, bytesRec));
            sender.Shutdown(SocketShutdown.Both);
            sender.Close();
Как видите, я не добавляю в конец пакета 0x0A и 0x00, а надо иначе сервер возвратит ошибку,точнее не ошибку а не верный ответ.
Как добавить в конец сокета нужные мне байты?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.08.2011, 14:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Добавление байтов при создании сокета (C#):

.NET 4.x Сканирование байтов в памяти, и получение начального адреса байтов - C#
Привет форумчане! У меня вопрос, как просканировать память у процесса так, чтобы получить адрес начала байтов в памяти? Я попробовал...

.NET 4.x Как формируется количество непрочитанных байтов в буфере при приеме RS-232 - C#
Вопрос сформировался после долгих экспериментов. событие private void serialPort1_DataReceived(object sender,...

Ошибка при закрытии сокета "Доступ к ликвидированному объекту невозможен" - C#
Здравтсвуйте, когда закрываю сокет - появляется ошибка: RecieveData Error. Досутп к ликвидированному обьекту невозможен. Имя объекта...

Ошибка при создании проекта - .NET
Днем попытался подключить 2 файлика проекту (dhtmled.ocx, triedit.dll - компоненты для создания HTML-редактора) и попытался добавить эти...

Ошибка при создании Microsoft.Speech - C#
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using...

Ошибка при создании векторов: Value must be positive - C#
Добрый вечер Есть определенная программа Все прекрасно работало долгое время для разных входных данных, однако в последнее время...

1
iva_a
152 / 124 / 3
Регистрация: 02.01.2011
Сообщений: 914
31.08.2011, 14:55 #2
Посмотрите это
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
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Windows.Forms; 
 
//Implements a sample socket client to connect to the server implmented in the AsyncSocketServer project
//Usage: AsyncSocketClient.exe <destination IP address> <destination port number>
 
//Destination IP address: The IP Address of the server to connect to
//Destination Port Number: The port number to connect to
 
namespace AsyncSocketClient
{
    class AsyncSocketClientProgram
    {
        static ManualResetEvent clientDone = new ManualResetEvent(false);
 
        static void Activate(string[] args)
        {
            IPAddress destinationAddr = null;          // IP Address of server to connect to
            int destinationPort = 0;                   // Port number of server
            SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs();
 
 
            if (args.Length != 2)
            {
                MessageBox.Show("Usage: AsyncSocketClient.exe <destination IP address> <destination port number>");
                
            }
            try
            {
                destinationAddr = IPAddress.Parse(args[0]);
                destinationPort = int.Parse(args[1]);
                if (destinationPort <= 0)
                {
                    throw new ArgumentException("Destination port number provided cannot be less than or equal to 0");
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
                MessageBox.Show("Usage: AsyncSocketClient.exe <destination IP address> <destination port number>");
            }
 
            // Create a socket and connect to the server
            Socket sock = new Socket(destinationAddr.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
            socketEventArg.Completed += new EventHandler<SocketAsyncEventArgs>(SocketEventArg_Completed);
            socketEventArg.RemoteEndPoint = new IPEndPoint(destinationAddr, destinationPort);
            socketEventArg.UserToken = sock;
            sock.ConnectAsync(socketEventArg);
            clientDone.WaitOne();
        }
 
        /// <summary>
        /// A single callback is used for all socket operations. This method forwards execution on to the correct handler 
        /// based on the type of completed operation
        /// </summary>
        static void SocketEventArg_Completed(object sender, SocketAsyncEventArgs e)
        {
            switch (e.LastOperation)
            {
                case SocketAsyncOperation.Connect:
                    ProcessConnect(e);
                    break;
                case SocketAsyncOperation.Receive:
                    ProcessReceive(e);
                    break;
                case SocketAsyncOperation.Send:
                    ProcessSend(e);
                    break;
                default:
                    throw new Exception("Invalid operation completed");
            }
        }
 
        /// <summary>
        /// Called when a ConnectAsync operation completes
        /// </summary>
        private static void ProcessConnect(SocketAsyncEventArgs e)
        {
            if (e.SocketError == SocketError.Success)
            {
                MessageBox.Show("Successfully connected to the server");
 
              
 
                byte[] buffer = Encoding.UTF8.GetBytes("Hello .......>\n\r");
 
                e.SetBuffer(buffer, 0, buffer.Length);
                Socket sock = e.UserToken as Socket;
                bool willRaiseEvent = sock.SendAsync(e);
                if (!willRaiseEvent)
                {
                    ProcessSend(e);
                }
 
 
            }
            else
            {
                throw new SocketException((int)e.SocketError);
            }
        }
 
        /// <summary>
        /// Called when a ReceiveAsync operation completes
        /// </summary>
       //sourth -  private static void ProcessReceive(SocketAsyncEventArgs e)
         private static string ProcessReceive(SocketAsyncEventArgs e)
       {
            if (e.SocketError == SocketError.Success)
            {
                string StrReceive = Encoding.UTF8.GetString(e.Buffer, 0, e.BytesTransferred);
                MessageBox.Show("Received from server: {0}", Encoding.UTF8.GetString(e.Buffer, 0, e.BytesTransferred));
              
                // Data has now been sent and received from the server. Disconnect from the server
                //ne zakryvayu poka socket
              Socket sock = e.UserToken as Socket;
                sock.Shutdown(SocketShutdown.Send);
                sock.Close();
                clientDone.Set();
                return StrReceive;
            }
            else
            {
                throw new SocketException((int)e.SocketError);
            }
        }
 
 
        /// <summary>
        /// Called when a SendAsync operation completes
        /// </summary>
        private static void ProcessSend(SocketAsyncEventArgs e)
        {
            if (e.SocketError == SocketError.Success)
            {
                MessageBox.Show("Sent 'Hello World' to the server");
                
 
                //Read data sent from the server
                Socket sock = e.UserToken as Socket;
                bool willRaiseEvent = sock.ReceiveAsync(e);
                if (!willRaiseEvent)
                {
                    ProcessReceive(e);
                }
            }
            else
            {
                throw new SocketException((int)e.SocketError);
            }
        }
    }
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.08.2011, 14:55
Привет! Вот еще темы с ответами:

Ошибка при создании проекта в VS 2010 - .NET
При создании проекта именно в C# вылетает вот такое сообщение. Кто знает в чем проблема?

Ошибка при создании потока с параметрами - C#
есть следующий метод, а в нем используется другой метод: /// &lt;summary&gt; /// изменить изображение на кнопке по id ///...

Out of memory при создании документа Word - C#
Добрый день. Есть простейшая программка, запускающая ms word. using System; using System.Collections.Generic; using...

Ошбка при создании объектов ОРС - C#
Добрый день! Пишу на С# ОРС клиент. Столкнулся с непонятно проблемой: При создании экземпляра любого класса представленного в...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.