Tag: tcpclient

在C#中接收和发送数据

我还在努力提高我之前写的一点点。 现在我遇到了接收数据的问题。 我有一个程序,我用它来发送字符串使用tcpClient到一个程序,我在其中侦听指定的端口。 它工作正常,所以我决定再向前发送数据 public static void receiveThread() { while (true) { TcpListener tcpListener = new TcpListener(IPAddress.Any, port); tcpListener.Start(); Console.WriteLine(“Waiting for connection…”); TcpClient tcpClient = tcpListener.AcceptTcpClient(); Console.WriteLine(“Connected with {0}”, tcpClient.Client.RemoteEndPoint); while (!(tcpClient.Client.Poll(20, SelectMode.SelectRead))) { NetworkStream networkStream = tcpClient.GetStream(); StreamReader streamReader = new StreamReader(networkStream); data = streamReader.ReadLine(); if (data != null) { Console.WriteLine(“Received data: {0}”, data); […]

C#TcpClient.Connect通过代理

我一直在高低搜索,但是到目前为止我所看到的一切,人们只是告诉我使用其他方法。 有了这个,我的问题是我正在尝试使用socks 5代理通过TcpClient连接到服务器 我目前的设置是: Client = new TcpClient(); Client.Connect(EndPoint); NetworkStream = Client.GetStream(); Stream = new new BufferedStream(NetworkStream); Stream.Write…//Write Packet information etc 我不确定我是否错过了任何信息,所以如果我有,我会很高兴地更新这个。

直接在Socket上使用TcpClient有什么好处?

我知道TcpClient是套接字类的包装器,如果使用TcpClient,我可以访问底层套接字,但是包装器究竟做了什么? 使用TCPClient时,我是否需要继续调用Receive(),就像使用套接字一样,或者包装器是否确保显示所有数据? 最后,我可以在服务器和客户端上使用TcpClient来包装套接字(在使用TcpListener接受服务器上的原始连接之后)

Windows自动化telnet

我想运行一组通常在telnet中运行的命令(来自c#)。 例如,我想运行以下内容 using System; using System.Diagnostics; namespace InteractWithConsoleApp { class Program { static void Main(string[] args) { ProcessStartInfo cmdStartInfo = new ProcessStartInfo(); cmdStartInfo.FileName = @”C:\Windows\System32\cmd.exe”; cmdStartInfo.RedirectStandardOutput = true; cmdStartInfo.RedirectStandardError = true; cmdStartInfo.RedirectStandardInput = true; cmdStartInfo.UseShellExecute = false; cmdStartInfo.CreateNoWindow = true; Process cmdProcess = new Process(); cmdProcess.StartInfo = cmdStartInfo; cmdProcess.ErrorDataReceived += cmd_Error; cmdProcess.OutputDataReceived += cmd_DataReceived; cmdProcess.EnableRaisingEvents […]

如何在C#中使用Tor控制协议?

我正在尝试以编程方式将命令发送到Tor控制端口以使其刷新链。 我无法在C#中找到任何示例,我的解决方案无法正常工作。 请求超时。 我有服务正在运行,我可以看到它在控制端口上监听。 public string Refresh() { TcpClient client = new TcpClient(“localhost”, 9051); string response = string.Empty; string authenticate = MakeTcpRequest(“AUTHENTICATE\r\n”, client); if (authenticate.Equals(“250”)) { response = MakeTcpRequest(“SIGNAL NEWNYM\r\n”, client); } client.Close(); return response; } public string MakeTcpRequest(string message, TcpClient client) { client.ReceiveTimeout = 20000; client.SendTimeout = 20000; string proxyResponse = string.Empty; try { […]

调用BeginAcceptTcpClient后停止TcpListener

我有这个代码…… internal static void Start() { TcpListener listenerSocket = new TcpListener(IPAddress.Any, 32599); listenerSocket.Start(); listenerSocket.BeginAcceptTcpClient(new AsyncCallback(AcceptClient), null); } 然后我的回叫function看起来像这样…… private static void AcceptClient(IAsyncResult asyncResult) { MessageHandler handler = new MessageHandler(listenerSocket.EndAcceptTcpClient(asyncResult)); ThreadPool.QueueUserWorkItem((object state) => handler.Process()); listenerSocket.BeginAcceptTcpClient(new AsyncCallback(AcceptClient), null); } 现在,我调用BeginAcceptTcpClient,然后一段时间后我想停止服务器。 为此,我一直在调用TcpListener.Stop()或TcpListener.Server.Close()。 然而,这两个都执行我的AcceptClient函数。 这会在我调用EndAcceptTcpClient时抛出exception。 围绕这个的最佳做法是什么? 一旦我调用了stop,我就可以放入一个标志来停止执行AcceptClient,但我想知道我是否遗漏了一些东西。 更新1 目前我通过将代码更改为这样来修补它。 private static void AcceptClient(IAsyncResult asyncResult) { if (!shutdown) { MessageHandler […]

如何在TcpClient类中使用SSL

在.NET框架中,有一个类TcpClient可以从电子邮件服务器中检索电子邮件。 TcpClient类有4个构造函数与服务器连接,最多需要两个参数。 它适用于那些不使用SSL的服务器。 但是gmail或许多其他电子邮件提供商使用SSL进行IMAP。 我可以连接gmail服务器但无法使用email_id和密码进行身份validation。 我的validation用户代码是 ‘public void AuthenticateUser(string username, string password) { _imapSw.WriteLine(“$ LOGIN ” + username + ” ” + password); //_imapSw is a object of StreamWriter class _imapSw.Flush(); Response(); }’ 但是这段代码无法登录。 那么当我必须使用SSL时,如何使用TcpClient类来检索电子邮件?

处理异步时TcpClient vs Socket

这不是另一个TcpClient vs Socket。 TcpClient是Socket类的一个包装器,用于简化开发,同时也暴露了底层的Socket。 还是…… 在TcpClient类的MSDN库页面上,可以阅读以下注释: TcpClient类提供了在同步阻塞模式下通过网络连接,发送和接收流数据的简单方法。 而对于Socket类: Socket类允许您使用ProtocolType枚举中列出的任何通信协议执行同步和异步数据传输。 要仅通过TcpCient异步发送/接收某些数据,必须调用GetStream,以便通过在TAP模式上调用ReadAsync和WriteAsync方法来异步读取/写入数据的基础NetworkStream。 (可能使用async / await构造)。 要通过Socket异步发送/接收一些数据(我不是专家,但我认为我做对了),我们可以通过调用BeginRead / EndRead BeginWrite / EndWrite(或者只是ReadAsync或者)来直接读取/写入套接字实例本身。 WriteAsync ..不暴露TAP模式 – 即不返回任务..令人困惑)。 首先,任何想法为什么.NET 4.5中的Socket类没有以任何方式实现TAP模式,即ReadAsync和WriteAsync返回Task(如果调用不同的事件以保留向后compat)? 无论如何,很容易从APM模型方法对构建一个Task方法,所以让我说我调用这个异步方法(用于读取)ReadAsyncTAP(返回一个Task)。 好 ? 所以现在让我说我想编写一个客户端方法async Task ReadNbBytes(int nbBytes) ,我将从我的代码调用异步从网络读取一定数量的字节。 完全基于TcpClient的此方法的实现将通过调用GetStream来获取NetworkStream,并且将包含等待ReadAsync调用的异步循环,直到缓冲区满。 基于Socket的这种方法的实现将包含一个等待ReadAsyncTAP的异步循环,直到缓冲区满。 在一天结束时,从客户端代码的角度来看,我认为它没有任何区别。 在这两种情况下, await ReadNbBytes的调用将立即“返回”。 但是,我认为它在幕后产生了影响……对于TcpClient,依赖于NetworkStream,与直接使用套接字相比,读取是否会在某种程度上阻塞或不阻止? 如果没有,那么在谈论同步阻塞模式时,TcpClient的注释是错误的吗? 如果有人能澄清,将非常感激! 谢谢。

TCP从客户端和服务器读取和写入

我正在尝试创建一个可以在彼此之间来回读写信息的客户端和服务器。 我可以从客户端和服务器写入读取但不反之亦然,我不知道为什么。 这里似乎没有人知道我之前问过什么,而且我无法在网上找到任何有用的东西。 如果您知道请告诉我,不要告诉我去阅读有关TCP的文章,因为它根本没有用。 客户: namespace ExampleClient { public partial class Form1 : Form { public static bool IsConnected; public static NetworkStream Writer; public static NetworkStream Receiver; public Form1() { InitializeComponent(); } private void BtnConnect_Click(object sender, EventArgs e) { TcpClient Connector = new TcpClient(); Connector.Connect(TxtIP.Text, Convert.ToInt32(TxtPort.Text)); IsConnected = true; Writer = Connector.GetStream(); Console.WriteLine(“Connected”); System.Threading.Thread Rec […]

C# – 用于登录防火墙的套接字

我写了一个应用程序来自动连接到我们不同的防火墙。 所有这些都使用相同的前端。 我们telnet到IP,他们给出消息LOGIN或LOGOUT并要求输入用户名或密码。 我用过这段代码: public static void ConnectToFirewall(string strUsername, string strPassword, string strFirewallIp) { IPAddress[] ipaIpAddressCollection = Dns.GetHostAddresses(strFirewallIp); IPEndPoint ipeIpEndPoint = new IPEndPoint(ipaIpAddressCollection[0], intPort); Socket sckSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); sckSocket.Connect(ipeIpEndPoint); string strData = strUsername + “\r\n”+ strPassword + “\r\n”; byte[] bytData = new byte[1024]; bytData = Encoding.ASCII.GetBytes(strData); sckSocket.Send(bytData); byte[] bytDataReceived = new byte[1024]; […]