using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; namespace SendFileToSocket { class Program { class ReadState { public int BufferSize; public byte[] Buffer; public Stream Stream; } static int MaxBufferSize = 1024 * 512; static void Main(string[] args) { if (args.Length != 3) { _ShowUsage(); return; } if (!File.Exists(args[2])) { _ShowUsage(); return; } try { var ipAddress = default(IPAddress); try { var addresses = Dns.GetHostAddresses(args[0]); ipAddress = addresses[0]; } catch { } if (ipAddress == default(IPAddress)) ipAddress = IPAddress.Parse(args[0]); var port = int.Parse(args[1]); var remoteEP = new IPEndPoint(ipAddress, port); using (var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) { socket.Connect(ipAddress, port); using (var stream = new NetworkStream(socket, true)) { var readState = new ReadState { BufferSize = MaxBufferSize, Buffer = new byte[MaxBufferSize], Stream = stream }; stream.BeginRead(readState.Buffer, 0, readState.BufferSize, _OnReadCompleted, readState); using (var streamWriter = new StreamWriter(stream)) { using (var file = File.OpenText(args[2])) { while (true) { var line = file.ReadLine(); if (line == null) break; streamWriter.WriteLine(line); break; } streamWriter.Flush(); } while (!_ReadCompleted) { Thread.Sleep(100); _ReadTimeout--; if (_ReadTimeout < 0) break; } } } } } catch(Exception ex) { Console.WriteLine(ex.Message); _ShowUsage(); } } static volatile int _ReadTimeout = 10; static volatile bool _ReadCompleted = false; static void _OnReadCompleted(IAsyncResult ar) { _ReadTimeout = 10; var readState = ar.AsyncState as ReadState; if (readState == null) return; try { var readed = readState.Stream.EndRead(ar); if (readed == 0) { _ReadCompleted = true; return; } Console.WriteLine(Encoding.Default.GetString(readState.Buffer, 0, readed)); readState.Stream.BeginRead(readState.Buffer, 0, readState.BufferSize, _OnReadCompleted, readState); } catch { _ReadCompleted = true; } } static void _ShowUsage() { Console.WriteLine("SendFileToSocket.exe "); } } }