返回信息流新建windowsFormsApplication工程,在form1.cs中的From1_Load中添加如下代码
make a = new make();
Thread thread = new Thread(a.listen);
thread.Start();
在工程中自己添加类
class make
{
Thread thread;
public void listen()
{
const int port = 8000;
//定义端口号
TcpListener tcplistener = new TcpListener(IPAddress.Any, port);
Console.WriteLine("侦听端口号: " + port.ToString());
tcplistener.Start();
//侦听端口号
while (true)
{
Socket socket = tcplistener.AcceptSocket();
//并获取传送和接收数据的Scoket实例
Proxy proxy = new Proxy(socket);
//Proxy类实例化
thread = new Thread(new ThreadStart(proxy.Run));
//创建线程
thread.Start();
//启动线程
}
}
}
class Proxy
{
Socket clientSocket;
Byte[] read = new byte[1024];
//定义一个空间,存储来自客户端请求数据包
Byte[] Buffer = null;
Encoding ASCII = Encoding.ASCII;
//设定编码
Byte[] RecvBytes = new Byte[4096];
//定义一个空间,存储Web服务器返回的数据
public Proxy(Socket socket)
{
//
// TODO: 在此处添加构造函数逻辑
//
this.clientSocket = socket;
}
public void Run()
{
//用clientSocket通信
}
}
然后运行,但是关闭主窗口后程序依然没关闭,如何解决?我猜是端口没关闭,tcp没断开,运行另一程序时显示“通常每个套接字地址(协议/网络地址/端口)只允许使用一次。”好像是端口依然被占应该在何处关闭端口断开tcp链接?
这是一条镜像帖。来源:北邮人论坛 / dot-net / #3015同步于 2011/5/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
dotNET机器人发帖
c#socket求救
yu10
2011/5/27镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
比较安全的方法:在主程序中添加线程的一个引用,退出前使用thread.abort()方法退出
暴力方法:Environment.Exit或CurrentProcess.Kill
【 在 yu10 (yu) 的大作中提到: 】
: 新建windowsFormsApplication工程,在form1.cs中的From1_Load中添加如下代码
: make a = new make();
: Thread thread = new Thread(a.listen);
: ...................
楼主关闭窗口的时候没有释放线程,尤其是没有释放线程中的socket~
【 在 Felomeng 的大作中提到: 】
: 比较安全的方法:在主程序中添加线程的一个引用,退出前使用thread.abort()方法退出
: 暴力方法:Environment.Exit或CurrentProcess.Kill
: 【 在 yu10 (yu) 的大作中提到: 】
: ...................
另外建议楼主在放狗搜一下经典的TCP 代码..
很多的地方可以改进.~~~
如果涉及比价复杂的通信建议采用WCF
【 在 lixunhuan 的大作中提到: 】
: 楼主关闭窗口的时候没有释放线程,尤其是没有释放线程中的socket~
: 【 在 Felomeng 的大作中提到: 】
: : 比较安全的方法:在主程序中添加线程的一个引用,退出前使用thread.abort()方法退出
: ...................
thread.backgrand = true;
【 在 yu10 的大作中提到: 】
: 新建windowsFormsApplication工程,在form1.cs中的From1_Load中添加如下代码
:
: make a = new make();
: ...................