问题描述
大神们,帮个忙,新手很纠结啊我在一个form1里同时接收其他两个form1传来的数据,分别进行显示,用的是UDP,但是我不能知道某一个数据是谁传来的,那两个form1的端口号我设置的是7000和8000,接收的是6000,我怎么能获取发送端的端口号,不知道我表达清楚了没,刚开始编c#,请多加指教
解决方案
解决方案二:
接收的时候会传入一个remoteEP的((IPEndPoint)remoteEP).Port
解决方案三:
能给段程序不?我现在提取出来的是随机的端口,不是我指定的。
解决方案四:
引用1楼Poopaye的回复:
接收的时候会传入一个remoteEP的((IPEndPoint)remoteEP).Port
能给段程序不?我现在获取到的是随机的端口
解决方案五:
udp非常简单,是基于数据块(而非流)的方式。例如:varudp=newUdpClient(4569);udp.BeginReceive(UdpReceived,udp);
然后privatevoidUdpReceived(IAsyncResulth){varudp=(UdpClient)h.AsyncState;IPEndPointremote=null;vardata=udp.EndReceive(h,refremote);newThread(x=>{varmsg=Encoding.UTF8.GetString(data);//你可以自己处理消息解码方式//处理收来的信息msg。可以在此处直接访问变量remote,获得对方的EndPoint。}).Start();udp.BeginReceive(UdpReceived,udp);}
解决方案六:
另外知道,实际上你不可能假设通讯对方只有2个、还是20000个。所以用什么7000、8000这是不对的。而且实际通讯时你收到的是最后一层(可能有多层)NAT路由器的端口号,并不能保证是什么7000、8000。要进行通讯,假设要识别20000个终端,应该通过业务级信令设计。而不是什么端口号!
解决方案七:
引用楼主wwwmz13248的回复:
那两个form1的端口号我设置的是7000和8000,接收的是6000,我怎么能获取发送端的端口号,
一般来说,设置发送端口是没有意义的。而绑定监听端口,跟发送无关。实际上发送时使用udp随机分配的端口号就行了。
解决方案八:
引用6楼以专业开发人员为伍的回复:
Quote: 引用楼主wwwmz13248的回复:
那两个form1的端口号我设置的是7000和8000,接收的是6000,我怎么能获取发送端的端口号,一般来说,设置发送端口是没有意义的。而绑定监听端口,跟发送无关。实际上发送时使用udp随机分配的端口号就行了。
是这样,我现在是做了三个form界面,整个工程只需要他们三个通信,一个界面里有两个listview,分别显示另两个发来的数据,但是不知道端口号,就不知道是谁发来的,不能正确的显示到相应的listview,所以想通过查看端口号来知道是谁发来的,用个if语句分开,请问我这样行吗?
解决方案九:
引用3楼wwwmz13248的回复:
Quote: 引用1楼Poopaye的回复:
接收的时候会传入一个remoteEP的((IPEndPoint)remoteEP).Port能给段程序不?我现在获取到的是随机的端口
你的程序真的写好了吗?是怎么接收的?
解决方案十:
引用8楼shingoscar的回复:
Quote: 引用3楼wwwmz13248的回复:
Quote: 引用1楼Poopaye的回复:
接收的时候会传入一个remoteEP的((IPEndPoint)remoteEP).Port能给段程序不?我现在获取到的是随机的端口
你的程序真的写好了吗?是怎么接收的?
IPHostEntryoIPHost=Dns.GetHostEntry(Environment.MachineName);IPEndPointremoteHost=newIPEndPoint(IPAddress.Any,0);while(udpClient!=null&&Thread.CurrentThread.ThreadState.Equals(ThreadState.Running)){byte[]buf=udpClient.Receive(refremoteHost);//stringbufs=BitConverter.ToString(buf);//byte[]portBytes=newbyte[4];//Buffer.BlockCopy(buf,0,portBytes,0,4);//intiPort=BitConverter.ToInt32(portBytes,0);//textBox3.Text=string.Format("来自{0}:{1}",remoteHost,iPort);textBox3.Text=string.Format("来自{0}",remoteHost);你看一下,端口会是随机的,怎么改啊
解决方案十一:
你这3个窗口是3个进程?如果在同一个工程里,根本没必要这么麻烦啊
解决方案十二:
引用10楼Z65443344的回复:
你这3个窗口是3个进程?如果在同一个工程里,根本没必要这么麻烦啊
是三个工程文件
解决方案十三:
byte[]buf=udpClient.Receive(refremoteHost);就是你这里的remoteHost,端口是随机的?
解决方案十四:
引用12楼shingoscar的回复:
byte[]buf=udpClient.Receive(refremoteHost);就是你这里的remoteHost,端口是随机的?
如果是随机的,意味着发送的地方你端口填了0
解决方案十五:
引用13楼Poopaye的回复:
Quote: 引用12楼shingoscar的回复:
byte[]buf=udpClient.Receive(refremoteHost);就是你这里的remoteHost,端口是随机的?如果是随机的,意味着发送的地方你端口填了0
发送端怎么用指定的端口发送啊?我有点糊涂了,我的发送端有发到哪个端口的指定,但接收端怎么是address.any,0,
解决方案:
你创建UdpClient的时候,一般就要指定端口的,这个就是你发送用的
解决方案:
引用15楼Poopaye的回复:
你创建UdpClient的时候,一般就要指定端口的,这个就是你发送用的
能给一段发送时指定端口的程序吗?或是绑定端口什么的?我还分不太清楚