问题描述
采用UDP方式,for循环同时向已知ip、同一端口的客户端发同一条信息,运行时会提示只能打开一次ip端口,问你是否继续处理?这么问题该如何处理?用多线程吗?
解决方案
解决方案二:
你的bind语句重复执行了。
解决方案三:
privatevoidSendMsgToAll(ClassMsgmsg)//SendMsgToAll(ClassMsgmsg)//发送消息给所有用户{try{//QQClass.UDPSocketudp=newQQClass.UDPSocket();foreach(System.Windows.Forms.ListViewItemiteminthis.LV_SysUser.Items){System.Net.IPAddressip=System.Net.IPAddress.Parse(item.SubItems[1].Text);intport=Convert.ToInt32(item.SubItems[2].Text);udpSocket1.Send(ip,port,newClassSerializers().SerializeBinary(msg).ToArray());}}catch{}}语句是这么样写的,通过循环读取用户ip、端口,然后一条条发出去,但是会提示你只能udpsocket1只能用一次ip、端口
解决方案四:
急哦,在先等??
解决方案五:
for循环里面不能放UdpClientclient=newUdpClient(IPEndPoint)或Socket.Bind之类的代码,这些代码要放在进入循环以前的位置,否则就会导致同一IP+Port重复绑定的错误
解决方案六:
但是我要一条一条读取出ip,port然后发送出去,我要怎么改这个代码哦??请高手门帮给我改改代码,要怎么做??
解决方案七:
不知道你的udpSocket1什么?也不知道你的udpSocket1.Send(...)怎样写的。
解决方案八:
楼主,你这段代码是用了一个socket对象,一次连接以后不断发给不同对象。既然已经提示你一次只能绑定一个,那就在for里面newudpsocket.
解决方案九:
我定义了一个控件publicpartialclassUDPSocket:Component{privateIPEndPointServerEndPoint=null;//定义网络端点privateUdpClientUDP_Server=newUdpClient();//创建网络服务,也就是UDP的SocketsprivateSystem.Threading.ThreadthdUdp;//创建一个线程publicdelegatevoidDataArrivalEventHandler(byte[]Data,IPAddressIp,intPort);//定义了一个托管方法publiceventDataArrivalEventHandlerDataArrival;//通过托管理在控件中定义一个事件privatestringlocalHost="127.0.0.1";[Browsable(true),Category("Local"),Description("本地IP地址")]//在“属性”窗口中显示localHost属性publicstringLocalHost{get{returnlocalHost;}set{localHost=value;}}privateintlocalPort=11000;[Browsable(true),Category("Local"),Description("本地端口号")]//在“属性”窗口中显示localPort属性publicintLocalPort{get{returnlocalPort;}set{localPort=value;}}privateboolactive=false;[Browsable(true),Category("Local"),Description("激活监听")]//在“属性”窗口中显示active属性publicboolActive{get{returnactive;}set//该属性读取值{active=value;if(active)//当值为True时{OpenSocket();//打开监听}else{CloseSocket();//关闭监听}}}//发消息的方法publicvoidSend(System.Net.IPAddressHost,intPort,byte[]Data){try{IPEndPointserver=newIPEndPoint(Host,Port);UDP_Server.Send(Data,Data.Length,server);}catch(Exceptione){MessageBox.Show(e.ToString());}}
解决方案十:
你考虑把类内的udpsocket对象放出来,在for里面newudpsocket,再把这个udp放入你的类里面。
解决方案十一:
坐等高手解答
解决方案十二:
运行时怎么会“运行时会提示只能打开一次ip端口,问你是否继续处理”,是谁抛出的这个对话框?是你的程序自己写的代码?还是杀毒软件?还是vs调试器?把你的多余的try...catch去掉(屏蔽掉),让调试器自动停在出错的语句上,贴出你真正抛出异常的画面截屏。如果连哪一条语句抛出异常,那无法调试。
解决方案十三:
如果连哪一条语句抛出异常都无法准确捕获,那无法调试。
解决方案十四:
”只能打开一次ip端口“这个提示是你自己程序的提示还是产生异常的提示?没说清楚