时间:2019-05-10 标签:c#socketconnectionwithmultithreadingtelnet
Posted
技术标签:
【中文标题】时间:2019-05-10 标签:c#socketconnectionwithmultithreadingtelnet【英文标题】:c# socket connection with multi threading telnet 【发布时间】:2020-10-01 08:42:22 【问题描述】:**我用c#这个代码socket连接多线程**
我需要为我的套接字连接 telnet 设置超时
string ip = "";
int port = 23;
string str = "";
IPAddress address = IPAddress.Parse(ip);
IPEndPoint ipEndPoint = new IPEndPoint(address, port);
Socket socket = new Socket(address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
socket.Connect((EndPoint)ipEndPoint);
try
byte[] numArray = new byte[1024];
while (socket.Connected)
int count = socket.Receive(numArray);
str += Encoding.ASCII.GetString(numArray, 0, count);
Console.WriteLine(str);
socket.Close();
catch (ArgumentNullException ex)
【问题讨论】:
【参考方案1】:您可以创建一个计时器来执行此操作,或者我喜欢给 socket.connected 一个时间范围并以此为基础。你显然需要根据你的条件修改时间,但这个例子过去对我有用。
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// Connect using a timeout (5 seconds)
IAsyncResult result = socket.BeginConnect( iP, iPort, null, null );
bool success = result.AsyncWaitHandle.WaitOne( 5000, true );
if ( socket.Connected )
socket.EndConnect( result );
else
//Be sure to close socket
socket.Close();
throw new ApplicationException("Failed to connect the server. Try again.");
我看到另一个人用计时器做的例子,但我没有亲自使用过,所以你更喜欢哪个。启动一个定时器(timer_connection),如果时间到了,检查socket连接是否连接(if(m_clientSocket.Connected)),如果没有,则弹出超时错误
private void connect(string ipAdd,string port)
try
SocketAsyncEventArgs e=new SocketAsyncEventArgs();
m_clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ip = IPAddress.Parse(serverIp);
int iPortNo = System.Convert.ToInt16(serverPort);
IPEndPoint ipEnd = new IPEndPoint(ip, iPortNo);
//m_clientSocket.
e.RemoteEndPoint = ipEnd;
e.UserToken = m_clientSocket;
e.Completed+=new EventHandler<SocketAsyncEventArgs>(e_Completed);
m_clientSocket.ConnectAsync(e);
if (timer_connection != null)
timer_connection.Dispose();
else
timer_connection = new Timer();
timer_connection.Interval = 2000;
timer_connection.Tick+=new EventHandler(timer_connection_Tick);
timer_connection.Start();
catch (SocketException se)
lb_connectStatus.Text = "Connection Failed";
MessageBox.Show(se.Message);
private void e_Completed(object sender,SocketAsyncEventArgs e)
lb_connectStatus.Text = "Connection Established";
WaitForServerData();
private void timer_connection_Tick(object sender, EventArgs e)
if (!m_clientSocket.Connected)
MessageBox.Show("Connection Timeout");
//m_clientSocket = null;
timer_connection.Stop();
【讨论】:
我会试一试,但是这个 timer_connection opejct 是什么...我认为它就像计时器,但计时器没有事件 Tick 我发布了两种不同的方法来做同样的事情。你可以做上面的方法,或者下面的方法。至于计时器,滴答是每个间隔周期发生的事情,在上面的示例中,它每 2 秒检查一次连接是否已连接。 这里有很多例子:***.com/questions/1062035/…以上是关于时间:2019-05-10 标签:c#socketconnectionwithmultithreadingtelnet的主要内容,如果未能解决你的问题,请参考以下文章
时间:2019-05-10 标签:c#release optimizationunusedstring
时间:2019-05-10 标签:c#paypalrestapitransactionsearch
时间:2019-05-10 标签:c#socketThread
时间:2019-05-10 标签:c++threadeddbclassmemorymixup