新建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链接?
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链接?
是线程的问题 有线程没结束
在决定退出前最好给你所有的线程一个“善终”(正常退出),如不能可以强制终端Abort(不推荐)楼主可以尝试在主线程中调用以下方法
1.Application.Exit(); //好像只在主线程可以起作用,而且当有线程,或是阻塞方法的情况下,很容易失灵
2.System.Environment.Exit(0); //无论在主线程和其它线程,只要执行了这句,都可以把程序结束干净
3.this.Close();
4.Application.ExitThread();有一个好使的就行了
thread = new Thread(new ThreadStart(proxy.Run));
//定义为后台线程
thread.IsBackground = true;
//创建线程
thread.Start();