Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/56: Рейтинг темы: голосов - 56, средняя оценка - 4.55
2 / 2 / 0
Регистрация: 19.02.2010
Сообщений: 96

Многопоточный сервер

09.12.2010, 23:18. Показов 11818. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть код консольного клиента
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
using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
 
namespace tcpclient
{
    class Program
    {
        static void Main(string[] args)
        {
            string data;
            string data2;
            int i=0;
            byte[] remdata = new byte[512];
            TcpClient Client = new TcpClient();       //создание новый экземпляр класса клиента
            Console.Write("IP to conect>>");        
            string ip = Console.ReadLine();
            Console.Write("\r\nPort>>>");
            int port = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("\r\nConnecting to server...");
            try
            {
                Client.Connect(ip, port); //Попытка соединиться с сервером
            }
            catch  //если не получилось вывести ошибку
            {
                Console.Write("Can not connect to server");
                return;
            }
            Console.Write("To end,try END");
            Socket Sock = Client.Client;
            while (true)                     //разговор с сервером если хотим выйти то вводим END
            {
                Console.Write("\r\n>");
                data = Console.ReadLine();
                if (data == "END")
                    break;
                    
                Sock.Send(Encoding.ASCII.GetBytes(data));   //преобразование типов
                i = Sock.Receive(remdata);
                data2=Encoding.ASCII.GetString(remdata,0,i).Trim();
                Console.WriteLine(data2);
            }
            Sock.Close();
            Client.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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
using System;
using System.Collections.Generic;
using System.Net.Sockets;
using System.Text;
using System.Threading;
 
namespace tcpserver
{
    class Program
    {
        static void Main(string[] args)
        {
            string cmd;
            Console.Write("Port to listen: ");
            int port = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Creating server...");
            Serve Serv = new Serve();
 
            Serv.Create(port);
 
            while(true)
            {
                cmd= Console.ReadLine();
                if(cmd == "EXIT")
                {
                    Serv.Close();
                    return;
                }
            }
        }
        public class Serve
        {
            private int LocalPort;
            private Thread ServThread;
            TcpListener Listener;
 
            public void Create(int port)
            {
                LocalPort = port;
                ServThread = new Thread(new ThreadStart(ServStart));
                ServThread.Start();
            }
            public void Close()
            {
                Listener.Stop();
                ServThread.Abort();
                return;
            }
            private void ServStart()
            {
                Socket ClientSock;
                string data;
                byte[] cldata = new byte[512];
                Listener = new TcpListener(LocalPort);
                Listener.Start();
                Console.WriteLine("Waiting connections [" + Convert.ToString(LocalPort) + "]...");
                try
                {
                    ClientSock = Listener.AcceptSocket();
                }
                catch
                {
                    ServThread.Abort();
                    return;
                }
                int i = 0;
                if (ClientSock.Connected)
                {
                    while (true)
                    {
                        try
                        {
                            i = ClientSock.Receive(cldata);
                        }
                        catch
                        {
                        }
                        try
                        {
                            if (i > 0)
                            {
                                data = Encoding.ASCII.GetString(cldata,0,i).Trim();
                                Console.WriteLine("<" + data);
                                if (data == "CLOSE")
                                {
                                    ClientSock.Send(Encoding.ASCII.GetBytes("Closing the server..."));
                                    ClientSock.Close();
                                    Listener.Stop();
                                    Console.WriteLine("Server closed. Reason: client wish! Type EXIT to quit the application");
                                    ServThread.Abort();
                                    return;
                                }
                                else
                                {
                                    ClientSock.Send(Encoding.ASCII.GetBytes("Your data: " + data));
                                }
                            }
                        }
                        catch
                        {
                            ClientSock.Close();
                            Listener.Stop();
                            Console.WriteLine("Server closing. Reason: client offline. Type EXIT to quit the application.");
                            ServThread.Abort();
                        }
                    }
                }
            }
        }
    }
}
Не получается сделать многопоточным сервером, точнее не совсем ясно как это сделать. Нид хелп)

Добавлено через 7 часов 0 минут
помогите пожалуйста, очень срочно нужно
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.12.2010, 23:18
Ответы с готовыми решениями:

Многопоточный клиент сервер c дуплексом
Добрый день, не знаю как реализовать многопоточный клиент сервер с дуплексом и синхронной отправкой и получением данных как будто это...

Графический чат через многопоточный сервер
Есть многопоточный сервер и клиент, который может общаться сам с собой) Помогите сделать чат так, чтобы несколько клиентов могли общаться...

Как написать многопоточный tcp сервер, рассчитанный на множество подключений
Всем привет, подскажите как написать tcp сервер, на tcp сокетах, к которому постоянно буду пытаться подключится много клиентов, но сервер...

14
3 / 3 / 0
Регистрация: 18.08.2010
Сообщений: 12
10.12.2010, 16:30
http://www.microsoft.com/Rus/M... nsock.mspx
ссылка удалена
 Комментарий модератора 
Ссылки на другие форумы запрещены

мне помогло))
1
2 / 2 / 0
Регистрация: 19.02.2010
Сообщений: 96
11.12.2010, 14:25  [ТС]
Спасибо большое

а я вот попробывал создавать каждый раз новый класс при подключении пользователя, но почему то всеравно только с одним работает

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
using System;
using System.Collections.Generic;
using System.Net.Sockets;
using System.Text;
using System.Threading;
 
 
namespace ThreadServer
{
    class Server
    {
        public static void Main(string[] args)
        {
            TcpListener Listener;
            string cmd;
            Console.Write("Port to listen: ");
            int port = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Creating server...");
            try 
            {
                Listener = new TcpListener(port);
                Listener.Start();
                while(true)
                {
                    Console.WriteLine("Waiting connections [" + Convert.ToString(port) + "]...");
                    new HttpConnect(Listener.AcceptSocket());
                    cmd = Console.ReadLine();
                    if(cmd == "EXIT")
                    {
                        return;
                    }
                }
            }
            catch 
            {
                Console.WriteLine("Usage: Server port");
                return;
            }
        }
    }
    class HttpConnect
    {
        private Socket ClientSock;
        private Thread ServThread; 
        
        public HttpConnect(Socket s)
        {
            ClientSock=s;
            ServThread = new Thread(new ThreadStart(run));
            ServThread.Start();
        }
        
        public void run()
        {
            string data;
            byte[] cldata = new byte[512];
            int i = 0;
            
            if (ClientSock.Connected)
            {
                while (true)
                {
                    try
                    {
                        i = ClientSock.Receive(cldata);
                    }
                    catch
                    {
                    }
                    try
                    {
                        if (i > 0)
                        {
                            data = Encoding.ASCII.GetString(cldata,0,i).Trim();
                            Console.WriteLine("<" + data);
                            if (data == "CLOSE")
                            {
                                ClientSock.Send(Encoding.ASCII.GetBytes("Closing the server..."));
                                ClientSock.Close();
                                Console.WriteLine("Server closed. Reason: client wish! Type EXIT to quit the application");
                                return;
                            }
                            else
                            {
                                    ClientSock.Send(Encoding.ASCII.GetBytes("Your data: " + data));
                            }
                        }
                    }
                    catch
                    {
                        ClientSock.Close();
                        Console.WriteLine("Server closing. Reason: client offline. Type EXIT to quit the application.");
                    }
                }
            }
        }
    }
}
0
2 / 2 / 0
Регистрация: 19.02.2010
Сообщений: 96
12.12.2010, 23:15  [ТС]
ну что, никто чтоли не может помочь?
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
13.12.2010, 06:12
Цитата Сообщение от staaas1k Посмотреть сообщение
ну что, никто чтоли не может помочь?
staaas1k, что значит никто? MoRiS дал тебе ссылку (см. выше) на очень грамотное описание
0
2 / 2 / 0
Регистрация: 19.02.2010
Сообщений: 96
13.12.2010, 13:21  [ТС]
Цитата Сообщение от nio Посмотреть сообщение
staaas1k, что значит никто? MoRiS дал тебе ссылку (см. выше) на очень грамотное описание
у меня почему то не компилируется оно
Index was outside the bounds of the array пишет
0
3 / 3 / 0
Регистрация: 18.08.2010
Сообщений: 12
13.12.2010, 15:03
Цитата Сообщение от staaas1k Посмотреть сообщение
Index was outside the bounds of the array пишет
код в студию!!! напиши хоть задание которое должно выполнять приложение
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
13.12.2010, 15:44
Цитата Сообщение от staaas1k Посмотреть сообщение
у меня почему то не компилируется оно
Index was outside the bounds of the array пишет
1) оно компилируется, эта ошибка выскакивает при выполнении
2) ошибка эта вызвана тем, что при запуске данного приложения ему в качестве параметра следует передавать порт
0
3 / 3 / 0
Регистрация: 18.08.2010
Сообщений: 12
13.12.2010, 16:57
Попробуй заменить
ThreadedServer ts = new ThreadedServer(int.Parse(args[0]));

на ThreadedServer ts = new ThreadedServer(11012); например, но не забудь на сервере написать такой же порт для прослушивания
0
2 / 2 / 0
Регистрация: 19.02.2010
Сообщений: 96
13.12.2010, 17:25  [ТС]
Цитата Сообщение от MoRiS Посмотреть сообщение
Попробуй заменить
ThreadedServer ts = new ThreadedServer(int.Parse(args[0]));

на ThreadedServer ts = new ThreadedServer(11012); например, но не забудь на сервере написать такой же порт для прослушивания
пробовал
то же самое

вот код

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
using System;
using System.Collections.Generic;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Net;
 
namespace tcpserver
{
    class Program
    {
        static void Main(string[] args)
        {
            //Console.Write("Port to listen: ");
            //int port = Convert.ToInt32(Console.ReadLine());
            ThreadedServer ts = new ThreadedServer(11012);
            ts.Start();
            Console.WriteLine("Creating server...");
        }
    }
 
    class ThreadedServer
    {
        private Socket _serverSocket;
        private int _port;
 
        public ThreadedServer(int port) { port = 11012;_port = port; Start(); }
 
        private class ConnectionInfo
        {
            public Socket Socket;
            public Thread Thread;
        }
 
        private Thread _acceptThread;
        private List<ConnectionInfo> _connections =
            new List<ConnectionInfo>();
 
        public void Start()
        {
            SetupServerSocket();
            _acceptThread = new Thread(AcceptConnections);
            _acceptThread.IsBackground = true;
            _acceptThread.Start();
        }
 
        private void SetupServerSocket()
        {
            // Получаем информацию о локальном компьютере
            IPHostEntry localMachineInfo =
                Dns.GetHostEntry(Dns.GetHostName());
            IPEndPoint myEndpoint = new IPEndPoint(
                localMachineInfo.AddressList[0], _port);
 
            // Создаем сокет, привязываем его к адресу
            // и начинаем прослушивание
            _serverSocket = new Socket(
                myEndpoint.Address.AddressFamily,
                SocketType.Stream, ProtocolType.Tcp);
            _serverSocket.Bind(myEndpoint);
            _serverSocket.Listen((int)
                SocketOptionName.MaxConnections);
        }
 
        private void AcceptConnections()
        {
            while (true)
            {
                // Принимаем соединение
                Socket socket = _serverSocket.Accept();
                ConnectionInfo connection = new ConnectionInfo();
                connection.Socket = socket;
 
                // Создаем поток для получения данных
                connection.Thread = new Thread(ProcessConnection);
                connection.Thread.IsBackground = true;
                connection.Thread.Start(connection);
 
                // Сохраняем сокет
                lock (_connections) _connections.Add(connection);
            }
        }
 
        private void ProcessConnection(object state)
        {
            ConnectionInfo connection = (ConnectionInfo)state;
            byte[] buffer = new byte[255];
            try
            {
                while (true)
                {
                    int bytesRead = connection.Socket.Receive(
                        buffer);
                    if (bytesRead > 0)
                    {
                        lock (_connections)
                        {
                            foreach (ConnectionInfo conn in
                                _connections)
                            {
                                if (conn != connection)
                                {
                                    conn.Socket.Send(
                                        buffer, bytesRead,
                                        SocketFlags.None);
                                }
                            }
                        }
                    }
                    else if (bytesRead == 0) return;
                }
            }
            catch (SocketException exc)
            {
                Console.WriteLine("Socket exception: " +
                    exc.SocketErrorCode);
            }
            catch (Exception exc)
            {
                Console.WriteLine("Exception: " + exc);
            }
            finally
            {
                connection.Socket.Close();
                lock (_connections) _connections.Remove(
                    connection);
            }
        }
    }
}
А задача тупо в том что на один сервер может присоединятся много пользователей и писать сообщения, он должен их принимать и отсылать обратно
0
3 / 3 / 0
Регистрация: 18.08.2010
Сообщений: 12
13.12.2010, 17:48
Цитата Сообщение от staaas1k Посмотреть сообщение
public ThreadedServer(int port) { port = 11012;_port = port; Start(); }
вот кто тебя просил вставлять ненужное в код!!!
оставь просто
C#
1
public ThreadedServer(int port) { _port = port;}
и добавь ещё одну строчку
C#
1
2
3
4
5
6
7
8
9
static void Main(string[] args)
        {
            //Console.Write("Port to listen: ");
            //int port = Convert.ToInt32(Console.ReadLine());
            ThreadedServer ts = new ThreadedServer(11012);
            ts.Start();
            Console.WriteLine("Creating server...");
            [B]Console.ReadLine();[/B]
        }
1
2 / 2 / 0
Регистрация: 19.02.2010
Сообщений: 96
13.12.2010, 19:19  [ТС]
аааа как сделать теперь чтоб с клавиатуры порт вводился?

Добавлено через 1 час 12 минут
все разборался наконец
всем спасибо)
0
 Аватар для DFO
0 / 0 / 1
Регистрация: 27.02.2009
Сообщений: 22
28.04.2011, 22:45
Непойму в чем проблема, у меня Win7 x64, скомпилировал сервер
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
using System;
using System.Collections.Generic;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Net;
 
namespace Serv
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Port to listen: ");
            int port = Convert.ToInt32(Console.ReadLine());
            ThreadedServer ts = new ThreadedServer(port);
            ts.Start();
            Console.WriteLine("Creating server...");
            while (true)
            {
                string command = "";
                command = Console.ReadLine();
                if (command == "exit")
                {
                    break;
                }
            }
        }
    }
 
    class ThreadedServer
    {
        private Socket _serverSocket;
        private int _port;
 
        public ThreadedServer(int port) { _port = port;}
 
        private class ConnectionInfo
        {
            public Socket Socket;
            public Thread Thread;
        }
 
        private Thread _acceptThread;
        private List<ConnectionInfo> _connections =
            new List<ConnectionInfo>();
 
        public void Start()
        {
            SetupServerSocket();
            _acceptThread = new Thread(AcceptConnections);
            _acceptThread.IsBackground = true;
            _acceptThread.Start();
        }
 
        private void SetupServerSocket()
        {
            // Получаем информацию о локальном компьютере
            IPHostEntry localMachineInfo =
                Dns.GetHostEntry(Dns.GetHostName());
            IPEndPoint myEndpoint = new IPEndPoint(
                localMachineInfo.AddressList[0], _port);
 
            // Создаем сокет, привязываем его к адресу
            // и начинаем прослушивание
            _serverSocket = new Socket(
                myEndpoint.Address.AddressFamily,
                SocketType.Stream, ProtocolType.Tcp);
            _serverSocket.Bind(myEndpoint);
            _serverSocket.Listen((int)
                SocketOptionName.MaxConnections);
        }
 
        private void AcceptConnections()
        {
            while (true)
            {
                // Принимаем соединение
                Socket socket = _serverSocket.Accept();
                ConnectionInfo connection = new ConnectionInfo();
                connection.Socket = socket;
 
                // Создаем поток для получения данных
                connection.Thread = new Thread(ProcessConnection);
                connection.Thread.IsBackground = true;
                connection.Thread.Start(connection);
 
                // Сохраняем сокет
                lock (_connections) _connections.Add(connection);
            }
        }
 
        private void ProcessConnection(object state)
        {
            ConnectionInfo connection = (ConnectionInfo)state;
            byte[] buffer = new byte[255];
            try
            {
                while (true)
                {
                    int bytesRead = connection.Socket.Receive(
                        buffer);
                    if (bytesRead > 0)
                    {
                        lock (_connections)
                        {
                            foreach (ConnectionInfo conn in
                                _connections)
                            {
                                if (conn != connection)
                                {
                                    conn.Socket.Send(
                                        buffer, bytesRead,
                                        SocketFlags.None);
                                }
                            }
                        }
                    }
                    else if (bytesRead == 0) return;
                }
            }
            catch (SocketException exc)
            {
                Console.WriteLine("Socket exception: " +
                    exc.SocketErrorCode);
            }
            catch (Exception exc)
            {
                Console.WriteLine("Exception: " + exc);
            }
            finally
            {
                connection.Socket.Close();
                lock (_connections) _connections.Remove(
                    connection);
            }
        }
    }
}
Но, не один клиент не может приконектится к серверу, проверял код по шагам и к удивлению на строчке кода:
C#
1
Socket socket = _serverSocket.Accept();
зависает, до :
C#
1
ConnectionInfo connection = new ConnectionInfo();
даже недоходит, в чем может быть проблема? Код клиента брал из первого поста.
0
 Аватар для DFO
0 / 0 / 1
Регистрация: 27.02.2009
Сообщений: 22
02.05.2011, 14:27
Все, разобрался сам.
0
774 / 554 / 80
Регистрация: 03.07.2011
Сообщений: 1,020
18.08.2011, 22:10
Добрый день,Разбираюсь с данной темой возник вопросик по поводу одной проблемы .В коде есть методы отправки данных с сервера клиенту .строчка 97 кода сервера и 36 строчка кода клиента где идет прием дынных обратно ,но данные назад не приходит, выводится пустота ( в чем может быть проблема ?.
Доп инфа :обе программы запускаю на одном компе ,сервер от клиента все данные получает исправно ,настроен роутер dir 100(если это конечно имеет значение при работе на одном компе ) .. Буду благодарен если кто подскажет !
Сервер:
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
using System;
using System.Collections.Generic;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Net;
using System.IO;
 
namespace tcpserver
{
    class Program
    {
        static void Main(string[] args)
        {
            //Console.Write("Port to listen: ");
            //int port = Convert.ToInt32(Console.ReadLine());
            ThreadedServer ts = new ThreadedServer(11012);
            ts.Start();
            Console.WriteLine("Creating server...");
            Console.ReadLine();
        }
    }
 
    class ThreadedServer
    {
        private Socket _serverSocket;
        private int _port;
 
        public ThreadedServer(int port) { _port = port; }
 
        private class ConnectionInfo
        {
            public Socket Socket;
            public Thread Thread;
        }
 
        private Thread _acceptThread;
        private List<ConnectionInfo> _connections =
            new List<ConnectionInfo>();
 
        public void Start()
        {
            SetupServerSocket();
            _acceptThread = new Thread(AcceptConnections);
            _acceptThread.IsBackground = true;
            _acceptThread.Start();
        }
 
        private void SetupServerSocket()
        {
            // Получаем информацию о локальном компьютере
            IPHostEntry localMachineInfo =
                Dns.GetHostEntry(Dns.GetHostName());
            IPEndPoint myEndpoint = new IPEndPoint(
                localMachineInfo.AddressList[0], _port);
 
            // Создаем сокет, привязываем его к адресу
            // и начинаем прослушивание
            _serverSocket = new Socket(
                myEndpoint.Address.AddressFamily,
                SocketType.Stream, ProtocolType.Tcp);
            _serverSocket.Bind(myEndpoint);
            _serverSocket.Listen((int)
                SocketOptionName.MaxConnections);
        }
 
        private void AcceptConnections()
        {
            while (true)
            {
                // Принимаем соединение
                Socket socket = _serverSocket.Accept();
                ConnectionInfo connection = new ConnectionInfo();
                connection.Socket = socket;
 
                // Создаем поток для получения данных
                connection.Thread = new Thread(ProcessConnection);
                connection.Thread.IsBackground = true;
                connection.Thread.Start(connection);
 
                // Сохраняем сокет
                lock (_connections) _connections.Add(connection);
            }
        }
 
        private void ProcessConnection(object state)
        {
            ConnectionInfo connection = (ConnectionInfo)state;
            byte[] buffer = new byte[255];
           
           
            try 
            {
                while (true)
                {
                    int bytesRead = connection.Socket.Receive(buffer);
                    connection.Socket.Send(buffer); 
                   
                        
                    if (bytesRead > 0)
                    {
                        
                       
                        byte[] barray = Encoding.ASCII.GetBytes("ABCDE");
                        string str = Encoding.ASCII.GetString(barray);
                        Console.WriteLine(Encoding.ASCII.GetString(buffer));
                        
                        lock (_connections)
                        {
                            foreach (ConnectionInfo conn in
                                _connections)
                            {
                                if (conn != connection)
                                {
                                    conn.Socket.Send(buffer, bytesRead,SocketFlags.None);
                                    
                                } 
                                
                            }
                        }
                    }
                    else if (bytesRead == 0) return;
                }
            }
            catch (SocketException exc)
            {
                Console.WriteLine("Socket exception: " +
                    exc.SocketErrorCode);
            }
            catch (Exception exc)
            {
                Console.WriteLine("Exception: " + exc);
            }
            finally
            {
                connection.Socket.Close();
                lock (_connections) _connections.Remove(
                    connection);
            }
        }
    }
}
клиент:
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
using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
 
namespace tcpclient
{
    class Program
    {
        static void Main(string[] args)
        {
            string data; // Юзерская дата
            byte[] remdata ={ };
            TcpClient Client = new TcpClient();
            string ip = "192.168.0.100";
            int port = 11012; 
            Console.WriteLine("\r\nConnecting to server...");
            try
            {
                Client.Connect(ip, port);
            }
            catch
            {
                Console.WriteLine("Cannot connect to remote host!");
                return;
            }
            Console.Write("done\r\nTo end, type 'END'");
            Socket Sock = Client.Client; 
            while (true) 
            {
                Console.Write("\r\n>    Send Receive");
                data = Console.ReadLine();
                if (data == "END")
                    break;
                Sock.Send(Encoding.ASCII.GetBytes("our data   = "+data)); 
                Sock.Receive(remdata);
                Console.Write("vot ona data "+Encoding.ASCII.GetString(remdata));
            }
            Sock.Close();
            Client.Close();
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.08.2011, 22:10
Помогаю со студенческими работами здесь

Многопоточный WebClient?
Добрый день форумчане. Есть приложение, и необходимость посылать запросы на сторонний API в многопоточном режиме. Какой клиент и...

Многопоточный чекер
Вообще интересует как организовать Многопоточность Вообще теоретически представляю, в каждый поток загружать новые данные. Но вот...

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

Многопоточный доступ к MemoryStream?
Как реализовать?

Многопоточный вывод в консоли
Что за бред выводит? Во во время работы цикла полоса загрузки выводит звездочки в перемешку с цифрами. Если закомментировать цикл - полоса...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru