Receive需要一下IPEndPoint 参数啊,它会返回IP地址的你是没发过帖子导致结贴率为0还是从来没结过?
解决方案 »
- c#中gridview如何隐藏一行
- 一个网站的正文部分怎么老是对不齐,是什么原因?可以提供用户名密码
- c# 数据库相关 新人求助
- 我的字符串过滤代码,请告诉我哪一种写法效率更高?或者还有更好的写法吗?
- 数据库的增删改,SQL语句与Dataset的性能问题,大家帮忙看看!
- Web程序如何度量字符串的象素长度?
- C#高手请进,winform与webform的发展方向,进入有机会得好工作
- 打开ACCESS数据库问题。
- 看一下吧!有兴趣的一起干!
- 动态数组的问题啊。
- 由于套接字没有连接并且(当使用一个 sendto 调用发送数据报套接字时)没有提供地址,发送或接收数据的请求没有被接受。(含服务端代码)
- c#.NET 开发BHO插件,FileDownload事件如何响应?怎样能够阻止对应的下载对话框的出现,使得IE能够继续导航
IPHostEntry iphost = new IPHostEntry();
iphost = Dns.GetHostEntry(Dns.GetHostName());
IPEndPoint ipend = new IPEndPoint(iphost.AddressList[0], 11000);
UdpClient= new UdpClient(ipend); byte[] recvData = uc.Receive(ref ipend);
string recvString = System.Text.Encoding.UTF8.GetString(recvData);我是这样写的,但接收到的只有发来的信息内容,没有对方的IP和端口号
//Creates an IPEndPoint to record the IP Address and port number of the sender.
// The IPEndPoint will allow you to read datagrams sent from any source.
IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);
try{ // Blocks until a message returns on this socket from a remote host.
Byte[] receiveBytes = receivingUdpClient.Receive(ref RemoteIpEndPoint);
...Receive 调用完成后,RemoteIpEndPoint 里面就应该是实际发送方的相关信息了。ref 不是白 ref 的。
感觉这么写很自然。开始不知道谁发来消息,一旦收到谁的消息(报文)了,就回应对方。
Receive返回已由远程主机发送的 UDP 数据。
public byte[] Receive (
ref IPEndPoint remoteEP
)remoteEP就是你说的对方ip 和端口
msdn的备注(虽然中文翻译的叫人难受,但是大概说明白了)
备注
Receive 方法将阻止,直到数据报从远程主机到达为止。如果数据可用,则 Receive 方法将读取入队的第一个数据报,并将数据部分作为字节数组返回。此方法使用发送方的 IPAddress 和端口号来填充 remoteEP 参数。如果在 Connect 方法中指定了默认远程主机,则 Receive 方法将只接受来自该主机的数据报。其他所有数据报将被丢弃。如果收到 SocketException,请使用 SocketException.ErrorCode 获取特定的错误代码。获取该代码后,可以参考 MSDN 中的 Windows Sockets version 2 API(Windows 套接字第 2 版 API)错误代码文档以获取有关错误的详细说明。
接收完后参数endPoint会被设置成对方的地址,所以上一句执行完后:
endPoint.Address就是对方ip
endPoint.Port就是对方端口