社区
C#
帖子详情
TcpListener占用的端口如何释放?
mmiikkeedd
2007-01-30 11:08:00
我用一个线程创建一个TcpListener并监听
然后停止监听
当再次开始监听的时候就会报错:
通常每个套接字地址(协议/网络地址/端口)只允许使用一次
不知道怎么解决啊?
注:我在停止监听的时候执行了stop方法,也执行过它里面socket的close方 法,还abort过那个线程,但是都失败了,郁闷了...
...全文
1564
11
打赏
收藏
TcpListener占用的端口如何释放?
我用一个线程创建一个TcpListener并监听 然后停止监听 当再次开始监听的时候就会报错: 通常每个套接字地址(协议/网络地址/端口)只允许使用一次 不知道怎么解决啊? 注:我在停止监听的时候执行了stop方法,也执行过它里面socket的close方 法,还abort过那个线程,但是都失败了,郁闷了...
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
darkh0rse
2007-02-25
打赏
举报
回复
是不是因为没有执行Client.Close()?
dengjiyun
2007-02-25
打赏
举报
回复
17172715到我的群里来讨论
lingdu_hua
2007-01-30
打赏
举报
回复
恩那,关闭TCPLISTENER时候不要放在TRY CATCH里.
不报错,程序正常运行.
Red_angelX
2007-01-30
打赏
举报
回复
private void buttonStop_Click(object sender, EventArgs e)
你只有停止线程的代码没有停止TCP的代码啊~
private void Connection()
{
try
{
tcplistener = new TcpListener(1218);
tcplistener.Start();
Debug("Start Server Success");
do
{
//Your Code Here
}
while(true);
}
catch(SocketException ee)
{
//Debug
Debug(ee.ToString());
}
}
private void DisConn()
{
try
{
tcplistener.Stop();
Debug("Stop Success");
}
catch(Exception)
{
tcplistener.Stop();
}
}
mmiikkeedd
2007-01-30
打赏
举报
回复
用GC手动清除都不行啊
看来只能用Socket试试了
又碰上一个糊里糊涂的控件
mmiikkeedd
2007-01-30
打赏
举报
回复
能在最后手动清除tcplistener对象么?
tgl10
2007-01-30
打赏
举报
回复
是啊,socket更好,TcpListener不必存在的
sqfeiyu
2007-01-30
打赏
举报
回复
TcpListener是有這個毛病﹐你試試在一個將TcpListener封裝在一個類中﹐停止時將類釋放.
建議用Socket
mmiikkeedd
2007-01-30
打赏
举报
回复
很多方法都尝试过了
但是不行啊
mmiikkeedd
2007-01-30
打赏
举报
回复
...
private bool isExit;
//保存所有连接的客户端
System.Collections.ArrayList clientList = new System.Collections.ArrayList();
TcpListener listener;
//用于一个线程操作另一个线程的代理和回调函数
private delegate void SetListBoxCallBack(string str);
private SetListBoxCallBack setListBoxCallBack;
private delegate void SetRichTextBoxCallback(string str);
private SetRichTextBoxCallback setRichTextBoxCallback;
private delegate void SetComboBoxCallback(object str);
private SetComboBoxCallback setComboBoxCallback;
private delegate void RemoveComboBoxItemsCallback(ReadWriteObject readWriteObject);
private RemoveComboBoxItemsCallback removeComboBoxItemsCallback;
//用于线程的同步
private EventWaitHandle allDone = new EventWaitHandle(false, EventResetMode.ManualReset);
private Thread myThread;
...
...
//开始监听
private void buttonStart_Click(object sender, EventArgs e)
{
//创建一个线程专门负责处理客户请求
ThreadStart ts = new ThreadStart(AcceptConnect);
myThread = new Thread(ts);
myThread.Start();
buttonStart.Enabled = false;
buttonStop.Enabled = true;
}
//负责监听客户连接的--------------线程方法
public void AcceptConnect()
{
//获取本机的ip地址
IPAddress[] ip = Dns.GetHostAddresses(Dns.GetHostName());
listener = new TcpListener(ip[0], 51888);
listener.Start();
while (isExit == false)
{
try
{
//将事件的状态设置为非终止
allDone.Reset();
//引用在异步操作完成时调用的回调方法
AsyncCallback callback = new AsyncCallback(AcceptTcpClientCallback);
listBoxStatus.Invoke(setListBoxCallBack, "开始等待客户连接");
//开始一个异步操作接受传入连接尝试
listener.BeginAcceptTcpClient(callback, listener);
//阻塞当前线程,直到收到客户连接信号
allDone.WaitOne();
}
catch (Exception err)
{
listBoxStatus.Invoke(setListBoxCallBack, err.Message);
break;
}
}
//listener.Server.Close();
}
//停止监听
private void buttonStop_Click(object sender, EventArgs e)
{
isExit = true;//设退出标志位为真
allDone.Set();//使处理等待连接的线程继续执行
try
{
myThread.Abort();
}
catch (Exception mm)
{
//do nothing
}
buttonStart.Enabled = true;
buttonStop.Enabled = false;
}
Red_angelX
2007-01-30
打赏
举报
回复
贴代码
C#
TcpListener
例程(源码)
在`
TcpListener
`的实例化过程中,你需要指定一个IP地址和
端口
号来标识服务器的位置。例如: ```csharp
TcpListener
listener = new
TcpListener
(IPAddress.Any, 12345); ``` 在这里,`IPAddress.Any`表示监听所有...
C#源码-检测本机UDP监听,TCP监听,TCP客户端连接的所有
端口
是否已经
占用
通过结合`UdpClient`、`
TcpListener
`和`TcpClient`类,我们可以实现对本机UDP监听、TCP监听和TCP客户端连接
端口
的
占用
情况进行全面检测。在开发过程中,这种功能可以帮助我们避免
端口
冲突,确保网络服务的正常运行。
TcpListener
类开发基础服务器及客户端 vs2005 小例子
1. **初始化**:首先,需要创建一个`
TcpListener
`实例,传入IP地址(通常为`IPAddress.Any`表示监听所有网络接口)和
端口
号。例如: ```csharp
TcpListener
listener = new
TcpListener
(IPAddress.Any, 12345); ``` ...
C# 简单的tcp服务器demo
创建TCP服务器的第一步是实例化`
TcpListener
`对象,指定要监听的IP地址和
端口
号。在大多数情况下,我们使用`IPAddress.Any`表示监听所有可用的网络接口,
端口
号通常是大于1024的任意未被
占用
的数字。 ```csharp Tcp...
端口
检测(是否被
占用
)
TcpListener
listener = new
TcpListener
(IPAddress.Loopback, port); try { listener.Start(); listener.Stop(); return false; //
端口
可用 } catch (SocketException ex) { return true; //
端口
被
占用
...
C#
111,120
社区成员
642,537
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章