在我的应用程序关闭后,端口仍然被收听,这是不好的Ju-ju?
我的应用程序在某个端口上侦听套接字消息。 我可以通过命令行中的“netstat -a”看到它是LISTENING。
当我关闭应用程序时,当我重新运行“netstat -a”时,机器仍在侦听该端口
这是一个问题吗?
似乎也许是这样,因为当我随后再次启动应用程序时,它会崩溃地崩溃。
我怎样才能使听力停止?
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using System.Net; using System.Net.Sockets; using System.Threading; using System.Diagnostics; namespace testSocketSendAndReceive_Nutshell { public partial class Form1 : Form { string sJerrysIPAddr = "10.24.93.110"; string sMyIPAddr = "10.24.93.128"; string sThisAppFileName = string.Empty; bool bThisInstanceFunctionsAsServer = false; internal static Form1 MainSocketPairForm = null; public Form1() { InitializeComponent(); MainSocketPairForm = this; } private void Form1_Load(object sender, EventArgs e) { sThisAppFileName = System.Diagnostics.Process.GetCurrentProcess().ProcessName; // This provides just the app name, appending ".vshost" but NOT ".exe" (testSocketSendAndReceive_Nutshell.vshost) lblFileName.Text = sThisAppFileName; // Client and Server code are here combined in one app; however, we want each instance to run as // just one or the other, so (the .exe functioning as a Server should be renamed with the subString // "Server" somewhere in the filename): bThisInstanceFunctionsAsServer = sThisAppFileName.Contains("Server"); if (bThisInstanceFunctionsAsServer) { new Thread(Server).Start(); // Run server method concurrently. Thread.Sleep(500); // Give server time to start. } btnSendMsg.Visible = !bThisInstanceFunctionsAsServer; textBox1.Visible = !bThisInstanceFunctionsAsServer; } static void Client() { using (TcpClient client = new TcpClient(Form1.MainSocketPairForm.sJerrysIPAddr, 51111)) // err here second time around using (NetworkStream n = client.GetStream()) { BinaryWriter w = new BinaryWriter(n); w.Write(Form1.MainSocketPairForm.textBox1.Text.ToString()); w.Flush(); Form1.MainSocketPairForm.label1.Text = new BinaryReader(n).ReadString(); } } static void Server() { TcpListener listener = new TcpListener(IPAddress.Any, 51111); listener.Start(); var shouldExit = false; while (!shouldExit) using (TcpClient c = listener.AcceptTcpClient()) { using (NetworkStream n = c.GetStream()) { string msg = new BinaryReader(n).ReadString(); if (msg == "exit") // Client told us to exit... shouldExit = true; BinaryWriter w = new BinaryWriter(n); w.Write(msg + " back atcha!"); w.Flush(); // Must call Flush because we're not disposing the writer. } } } private void button1_Click(object sender, EventArgs e) { Client(); } private void button2_Click(object sender, EventArgs e) { Close(); } } }
您的应用程序可能实际上并未退出(请检查.exe的任务管理器“进程”选项卡)。
您可能只是关闭命令窗口来尝试关闭应用程序。 因为您的服务器线程不是后台线程 ,所以它将继续运行。 在Form_Load中尝试这个人:
上述就是C#学习教程:在我的应用程序关闭后,端口仍然被收听,这是不好的Ju-ju?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
if (bThisInstanceFunctionsAsServer) { var serverThread = new Thread(Server); serverThread.IsBackground = true; // Make sure the server thread doesn't keep the app running in the background serverThread.Start(); // Run server method concurrently. Thread.Sleep(500); // Give server time to start. }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1040517.html