Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
1

Обмен сообщениями между сокетами

21.08.2012, 17:38. Показов 2366. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть два приложение одно - клиент, второе - сервер.
клиент
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
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;
 
namespace ClientSocket
{
    class Propgram
    {
 
        static void Main(string[] args)
        {
 
            TcpClient tcpClient;
 
            NetworkStream networkStream;
 
            StreamReader streamReader;
 
            StreamWriter streamWriter;
 
            try
            {
 
                tcpClient = new TcpClient("localhost", 5555);
 
                networkStream = tcpClient.GetStream();
 
                streamReader = new StreamReader(networkStream);
 
                streamWriter = new StreamWriter(networkStream);
 
                streamWriter.WriteLine("Message from the Client...");
 
                streamWriter.Flush();
 
            }
 
            catch (SocketException ex)
            {
 
                Console.WriteLine(ex);
 
            }
 
            Console.Read();
 
        }
 
    }
}

сервер

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net.Sockets;
using System.Net;
 
namespace Server
{
    public class Server
    {
 
        public void ServerStart()
        {
 
            StreamWriter streamWriter;
 
            StreamReader streamReader;
 
            NetworkStream networkStream;
            IPAddress ipAddress = Dns.GetHostEntry("localhost").AddressList[0];
            TcpListener tcpListener = new TcpListener(ipAddress, 5555);
 
            tcpListener.Start();
 
            Console.WriteLine("The Server has started on port 5555");
 
            Socket serverSocket = tcpListener.AcceptSocket();
 
            try
            {
 
                if (serverSocket.Connected)
                {
 
                    while (true)
                    {
 
                        Console.WriteLine("Client connected");
 
                        networkStream = new NetworkStream(serverSocket);
 
                        streamWriter = new StreamWriter(networkStream);
 
                        streamReader = new StreamReader(networkStream);
 
                        Console.WriteLine(streamReader.ReadLine());
 
                    }
 
                }
 
                if (serverSocket.Connected)
 
                    serverSocket.Close();
 
                Console.Read();
 
            }
 
            catch (SocketException ex)
            {
 
                Console.WriteLine(ex);
 
            }
 
        }
 
    }
}


Как между ними организовать обмен сообщениями, что бы клиент отправлял серверу строку(Console.ReadLine) и после обработки строки сервером получал ответ.

Добавлено через 2 часа 59 минут
помогите пожалуйста
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.08.2012, 17:38
Ответы с готовыми решениями:

Обмен сообщениями между приложением и устройством
Приветствую! Обмен сообщениями будет между приложением и устройством(имеет заводской ip). Где...

Как организовать непрерывный обмен между сокетами без переподключения?
Есть примеры синхронных клиента и сервера с использованием сокетов. А мне нужно организовать обмен...

Обмен файлами и сообщениями через интернет
Мне надо сделать программу, которая будет обмениваться сообщениями с такой-же программой на другом...

Обмен сообщениями через протокол Tcp
Приветствую, форумчане! Христос Воскресе!:) Собственно, задание: Напишите программу, которая при...

4
82 / 82 / 24
Регистрация: 30.09.2011
Сообщений: 404
Записей в блоге: 6
21.08.2012, 19:23 2
Лучше бы использовал класс Socket, по мне он удобнее. Дать пример, использования этого класса?
0
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
21.08.2012, 20:16  [ТС] 3
Уже использую его, но проблемы с кодировкой.
Дай свой пример плиз?
0
82 / 82 / 24
Регистрация: 30.09.2011
Сообщений: 404
Записей в блоге: 6
21.08.2012, 21:15 4
Server
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
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;
 
namespace TcpServer
{
    class SocketServer
    {
        private Socket server;
        private IPEndPoint ip;
        private List<Thread> thread_list;
        private int max_conn;
        public SocketServer(string ip, Int32 port)
        {
            this.max_conn = 2;
            this.thread_list = new List<Thread>();
            this.ip = new IPEndPoint(IPAddress.Parse(ip), port);
            this.server = new Socket(this.ip.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
            this.server.Bind(this.ip);
            this.server.Listen(this.max_conn);
        }
 
        public void Start()
        {
            for (int i = 0; i < this.max_conn; i++)
            {
                Thread th = new Thread(new ThreadStart(Listening));
                th.Start();
                thread_list.Add(th);
            }
        }
 
        public void Dispose()
        {
            foreach (Thread th in thread_list)
            {
                th.Abort();
            }
            server.Close();
        }
 
        private void Listening()
        {
            while (true)
            {
                try
                {
                    using (Socket client = this.server.Accept())
                    {
                        Console.WriteLine("New connection: " + client.RemoteEndPoint.ToString());
                        client.Blocking = true;
                        while (client.Connected)
                        {
                            //тут обрабатываются все взаимодействия клиента с сервером
                            string message = Receive(client);
                            Console.WriteLine("receive: " + message);
                            Send(message, client);
                        }
                    }
                }
                catch (SocketException ex)
                {
 
                }
            }
        }
 
        private string Receive(Socket handler)
        {
            string message = String.Empty;
            byte[] GetBytes = new byte[1024];
            int b = handler.Receive(GetBytes);
            message = Encoding.UTF8.GetString(GetBytes, 0, b);
            return message;
        }
 
        public void Send(string message, Socket handler)
        {
            byte[] tosend = Encoding.UTF8.GetBytes(message);
            handler.Send(tosend, 0, tosend.Length, SocketFlags.None);
        }
    }
}
//example how use
static void Main(string[] args)
        {
            SocketServer server = new SocketServer("192.168.1.3", 12000);
            server.Start();
        }


Client
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
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Text;
 
namespace TcpClient
{
    class SocketClient
    {
        private Socket client;
        private IPEndPoint ip;
        public SocketClient(string ip, Int32 port)
        {
            this.ip = new IPEndPoint(IPAddress.Parse(ip), port);
            this.client = new Socket(this.ip.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
 
        }
 
        public void Connect()
        {
            this.client.Connect(this.ip);
        }
 
        public void Send(string message)
        {
            byte[] tosend = Encoding.UTF8.GetBytes(message);
            this.client.Send(tosend, 0, tosend.Length, SocketFlags.None);
        }
 
        public string Receive()
        {
            string message = String.Empty;
            byte[] GetBytes = new byte[1024];
            int b =this.client.Receive(GetBytes);
            message = Encoding.UTF8.GetString(GetBytes, 0, b);
            return message;
        }
        public void Disconnect()
        {
            this.client.Disconnect(false);
        }
    }
}
///example how use
static void Main(string[] args)
        {
            SocketClient client = new SocketClient("192.168.1.3", 12000);
            client.Connect();
            client.Send("Hello Server");
            client.Receive();
            Console.Read();
            client.Disconnect();
        }


Держи, правда без коментов, но думаю разберешься.
2
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
22.08.2012, 08:51  [ТС] 5
спасибо.
0
22.08.2012, 08:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.08.2012, 08:51
Помогаю со студенческими работами здесь

Обмен данными между С++ и С#
Имеются две независимые программы, одна из них написана на С++, другая на С#. Как от одной передать...

Обмен между плагинами
Добрый вечер. Создаю плагинное приложение. На входе-битовый файл, из файла 1-й плагин извлекает по...

Обмен данными между процессами
Уважаемое сообщество, помогите, пожалуйста, мне разобраться с проблемкой. Мое приложение в каждом...

Обмен данными между формами
Как в C# сделать обмен данными между двумя формами? на С++ делал следующим образом: ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru