问题描述
textReceive=newThread(newThreadStart(ReceiveTextMsg));textReceive.IsBackground=true;textReceive.Start();publicvoidReceiveTextMsg(){try{socketReceive=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);stringip=GetLocalIP();ipReceive=newIPEndPoint(IPAddress.Parse(ip),8899);socketReceive.Bind(ipReceive);socketReceive.Listen(1024);}catch(Exceptionerr){Voice.WriteLog(err.Message+"fromReceiveTextMsgahead!");}while(true){Socketchat=socketReceive.Accept();try{..........}catch{chat.close();}}}相关代码如上,每次打开窗体(用菜单命令新建该窗体)运行时正常,关闭该窗体后提示未处理InvalidOperationException,在执行此操作前必须调用先bind方法
解决方案
解决方案二:
如果已经进入catch了,就别while(true)了啊
解决方案三:
好像是端口被占用了
解决方案四:
我猜你是窗体关闭时socket没有释放,导致在同一个端口有2个socket对象要对它侦听,所以就抛异常了
解决方案五:
楼主可爱阿,还是用手机拍照截屏的。
解决方案六:
引用3楼Z65443344的回复:
我猜你是窗体关闭时socket没有释放,导致在同一个端口有2个socket对象要对它侦听,所以就抛异常了
怎样释放socket,用socket.close()不就可以了吗?
解决方案七:
catch里的异常是什么?
解决方案八:
引用5楼lonelywolf115的回复:
Quote: 引用3楼Z65443344的回复:
我猜你是窗体关闭时socket没有释放,导致在同一个端口有2个socket对象要对它侦听,所以就抛异常了怎样释放socket,用socket.close()不就可以了吗?
问题是你到底释放的哪个socket,是用于服务端监听的还是用于跟客户端通信的
解决方案九:
我依稀看到图片中后面的灯光
解决方案十:
1、把trycatc都去掉,先把代码调通2、我猜,你第一次打开正常,关闭程序的时候,资源没释放(表面上窗体看不到了,去任务管理器看可能进程还在)