c# UDP 如何获取发送数据方的端口号

问题描述

大神们,帮个忙,新手很纠结啊我在一个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的时候,一般就要指定端口的,这个就是你发送用的

能给一段发送时指定端口的程序吗?或是绑定端口什么的?我还分不太清楚

时间: 2024-09-29 09:27:11

c# UDP 如何获取发送数据方的端口号的相关文章

Socket 接收和发送数据的深刻理解.

今天仔细研究了一下关于TCP/UDP接收和发送数据的具体实现和下层接收数据的缓冲区,原理UDP从数据缓冲区中接收数据的方式和TCP从缓冲区中读取数据的方式是不同的,UDP接收缓冲区中也会依次保存接收到的数据,如果缓冲区满了则再接收的数据就会丢失,UDP接收数据和发送数据的次数应该是相同的,UDP不管你每次接收的数据的多少,只要你接收了一次数据那么就相当于接收了发送端某次发送的数据,而不管你接收的多少,本次的数据都将清空,注意:这里说的是本次的数据.再具体点比如:发送端连续两次发送了3个字节的数据

TCPCLIENT一个客户端同时对多个服务端发送数据

问题描述 现在需求是一个客户端对多个服务端发送数据我的客户端程序是4个新线程,分别连接4个服务端现在出现的问题是发送数据到服务端时,只对一个连接就很快,但是4个同时连接,同时发送就会很慢请问是哪里的问题 解决方案 解决方案二:是带宽的问题,楼主用的是什么网络,家用的网络只是下载很快,上传则是极慢的,这是潜规则.解决方案三:首先,不要扯上什么"线程"概念,这样就能先避免一部分误区.你的进程中有四个TcpClient对象,对象就是对象,跟线程没有半毛钱关系,你把它们安排到程序中作为内存中的

asp.net发数据到c++端??

问题描述 用什么方法可以方便asp.net发送数据给c++端,然后c++端返回相关数据呀?asp.netweb程序和c++(托管)做的程序是放在同一服务器下的.比如,用户在web端登陆成功后.然后把相关的数据发送到c++程序中去处理.处理完后返回消息.请各位详细回答下.先谢谢了!目前我只知道用数据库,文件,webserver.但是感觉不太好.不知有没有其它的方法

udp获取发送端的发送端口

问题描述 udp获取发送端的发送端口 udp进行数据接收,怎样获取发送方的发送端口,用GetPeerName()函数不行啊!谢谢大家!

udp通信 接收不到包-win7 下进行UDP通信测试发现UDP服务器无法接收到CLIENT的发送数据这是啥原因?

问题描述 win7 下进行UDP通信测试发现UDP服务器无法接收到CLIENT的发送数据这是啥原因? 进行UDP数据通信的时候,UDP的客户端用WIRESHARK抓包,能很明显的看到数据发出来了,数据格式也是正确的,但是服务那边的就是接受不到数据,接受卡在接受哪里不动了.查看防火墙,防火墙也是关了的:该程序在WINXP下通信都是正确的,哪位大侠能给下解决方案?总觉得是WIN7在哪里设置有问题:另外我查看QQ的设置,开放该应用程序的UDP协议为开放所有协议,还是不行. 解决方案 WIN7下UDP需

发送数据-UDP数据包的发送顺序怎么确定?

问题描述 UDP数据包的发送顺序怎么确定? 我用UDP发送数据包,在连续发送的情况下,接收端怎么确定我的发送顺序? 有什么方法,还是在发送的时候要先添加序号? 解决方案 UDP 是无顺序的,先发的包不一定会先到,所以最好还是自己在协议中增加包的编号. 接收处理时,按无序的逻辑进行,这样就能正常完成数据的接收. 否则,就换 TCP 协议吧,它的顺序是可以保证的. 解决方案二: 自己编号自己编号自己编号 解决方案三: UDP没顺序,自己需要定义协议等来完成组包

fpga 网口通信-FPGA向PC网口发送数据,已按UDP封装,但用抓包工具找不到发送的数据包,怎么破啊?

问题描述 FPGA向PC网口发送数据,已按UDP封装,但用抓包工具找不到发送的数据包,怎么破啊? 问题如标题所示, 采用的是XILINX的virtex 6芯片 网口程序在原本V6核里面的tri emac IP core中添加自己的UDP封装 抓不到发送的数据包 直接用IP核附带的example程序也不行 求大神指导啊......

数据包-在win7中使用socket UDP 编程时,数据发送不出来

问题描述 在win7中使用socket UDP 编程时,数据发送不出来 各位大哥大姐,我在使用 socket 做 UDP编程时,遇到一个非常奇怪的问题 1,在win7下使用 sendto 函数发送数据时,sendto函数的返回值正常,但是有时候没有数据发送出来(抓不到数据包),但是当拔掉网线,重插一下就有数据了,但是待会儿就又没有了(这个不是网线接触不好,因为电脑上网一直正常) 2,同样程序,在XP系统里没有问题 求高手指点,感激不尽!!!!!

vc udp组播-UDP组播通信,发送数据正常,但是只能接受到本机发出的数据,为什么?

问题描述 UDP组播通信,发送数据正常,但是只能接受到本机发出的数据,为什么? UDP组播通信,发送数据正常,但是只能接受到本机发出的数据,收不到其他机器发出的数据.这是代码:enter code hereSend_ACT_time_interval_set(); int nlen=sizeof(sact); memcpy(sendbuf,(char*)&sact,sizeof(sendbuf)); int nlenm=sizeof(sendbuf); int nlenn=sendto(sock