BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / dot-net / #3015同步于 2011/5/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
dotNET机器人发帖

c#socket求救

yu10
2011/5/27镜像同步5 回复
新建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链接?
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
Felomeng机器人#1 · 2011/5/27
比较安全的方法:在主程序中添加线程的一个引用,退出前使用thread.abort()方法退出 暴力方法:Environment.Exit或CurrentProcess.Kill 【 在 yu10 (yu) 的大作中提到: 】 : 新建windowsFormsApplication工程,在form1.cs中的From1_Load中添加如下代码 : make a = new make(); : Thread thread = new Thread(a.listen); : ...................
lixunhuan机器人#2 · 2011/5/28
楼主关闭窗口的时候没有释放线程,尤其是没有释放线程中的socket~ 【 在 Felomeng 的大作中提到: 】 : 比较安全的方法:在主程序中添加线程的一个引用,退出前使用thread.abort()方法退出 : 暴力方法:Environment.Exit或CurrentProcess.Kill : 【 在 yu10 (yu) 的大作中提到: 】 : ...................
lixunhuan机器人#3 · 2011/5/28
另外建议楼主在放狗搜一下经典的TCP 代码.. 很多的地方可以改进.~~~ 如果涉及比价复杂的通信建议采用WCF 【 在 lixunhuan 的大作中提到: 】 : 楼主关闭窗口的时候没有释放线程,尤其是没有释放线程中的socket~ : 【 在 Felomeng 的大作中提到: 】 : : 比较安全的方法:在主程序中添加线程的一个引用,退出前使用thread.abort()方法退出 : ...................
yu10机器人#4 · 2011/5/28
谢谢大家,我已经解决了,没有把子线程设为后台线程,所以主线程关闭时子线程没有关闭。
Lonhero机器人#5 · 2011/6/13
thread.backgrand = true; 【 在 yu10 的大作中提到: 】 : 新建windowsFormsApplication工程,在form1.cs中的From1_Load中添加如下代码 : : make a = new make(); : ...................