Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Net;
- using System.Net.Sockets;
- using System.Threading;
- namespace test_client
- {
- class Program
- {
- private static Socket socket;
- private static SocketAsyncEventArgs SockAsyncEventArgs; // объект для асинхронной операции на сокете
- private static byte[] buff; // буфер обмена
- private static void Init()
- {
- socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- buff = new byte[256];
- SockAsyncEventArgs = new SocketAsyncEventArgs();
- // подписываемся на завершение асинхронного соединения
- SockAsyncEventArgs.Completed += SockAsyncArgs_Completed;
- }
- private static void res()
- {
- try
- {
- while (true)
- {
- if (socket.Available > 0) //если пришли данные
- {
- //Thread.Sleep(500);
- ProcessSend(SockAsyncEventArgs); // получаем их
- }
- }
- }
- catch (Exception e)
- {
- Console.WriteLine("res: " + e.Message);
- }
- }
- private static void SockAsyncArgs_Completed(object sender, SocketAsyncEventArgs e)
- {
- switch (e.LastOperation)
- {
- case SocketAsyncOperation.Connect:
- ProcessConnect(e);
- break;
- case SocketAsyncOperation.Receive:
- ProcessReceive(e);
- break;
- }
- }
- private static void Start_Connect(string address, int port)
- {
- SockAsyncEventArgs.RemoteEndPoint = new IPEndPoint(IPAddress.Parse(address), port);
- ConnectAsync(SockAsyncEventArgs);
- }
- private static void ConnectAsync(SocketAsyncEventArgs e)
- {
- bool willRaiseEvent = socket.ConnectAsync(e);
- if (!willRaiseEvent)
- ProcessConnect(e);
- }
- private static void ProcessConnect(SocketAsyncEventArgs e)
- {
- if (e.SocketError == SocketError.Success)
- {
- SockAsyncEventArgs.SetBuffer(buff, 0, buff.Length);
- res();
- }
- else
- Console.WriteLine("Lost connection with " + e.RemoteEndPoint.ToString());
- }
- private static void SendAsync(byte[] data)
- {
- if (socket.Connected && data.Length > 0)
- {
- SocketAsyncEventArgs e = new SocketAsyncEventArgs();
- e.SetBuffer(data, 0, data.Length);
- e.Completed += SockAsyncArgs_Completed;
- bool willRaiseEvent = socket.SendAsync(e);
- // Console.WriteLine("bytes sent: "+data.Length);
- }
- }
- private static void ProcessSend(SocketAsyncEventArgs e)
- {
- try
- {
- if (e.SocketError == SocketError.Success)
- {
- ReceiveAsync(SockAsyncEventArgs);
- }
- else
- {
- Console.WriteLine("Not sended");
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine("ProcessSend: " + ex.Message);
- }
- }
- private static void ReceiveAsync(SocketAsyncEventArgs e)
- {
- try
- {
- bool willRaiseEvent = socket.ReceiveAsync(e);
- if (!willRaiseEvent)
- ProcessReceive(e);
- }
- catch (Exception ex)
- {
- Console.WriteLine("ReceiveAsync: " + ex.Message);
- }
- }
- private static void ProcessReceive(SocketAsyncEventArgs e)
- {
- if (e.SocketError == SocketError.Success)
- {
- try
- {
- string s = Encoding.UTF8.GetString(e.Buffer, 0, e.BytesTransferred); //получаем идентификатор команды
- Console.WriteLine(s);
- //Console.WriteLine("receive bytes: "+e.BytesTransferred);
- }
- catch (Exception ex)
- {
- Console.WriteLine("ProcessReceive: " + ex.Message);
- }
- }
- }
- static int Main(string[] args)
- {
- Init(); //подготовка соединения с сервером
- Start_Connect("127.0.0.1", 9095); //соединяемся с сервером
- string s = "";
- Console.ReadKey();
- for (int i = 0; i < 20; i++)
- {
- if (i % 2 > 0)
- {
- s = "приветики " + i;
- SendAsync(Encoding.UTF8.GetBytes(s));
- }
- else
- {
- s = "ку " + i;
- SendAsync(Encoding.UTF8.GetBytes(s));
- }
- Thread.Sleep(250);
- }
- Console.ReadLine();
- return 0;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement