
1)如果socket采用的是TCP协议,则在执行Connect方法时指定外网的IP和端口//假设外网的IP地址为21893121156socketConnect(IPAddressParse("21893121156"),10001);2)如果socket采用的UDP协议,则在执行SendTo方法时指定外网地址和
既然是Socket点对点的都会是长连接
socket对象有
socketgetInetAddress();
socketgetPort()
就可以得到对方的ip和端口号
IPAddress remote_ip = ((SystemNetIPEndPoint)workerSocketRemoteEndPoint)Address;//获取远程连接IP
通过计算机名称获得ip
SystemNetIPAddress[] addresses = SystemNetDnsGetHostAddresses ( ">
暂时还没看出问题来,可以测试一下
1、判断getpeername的返回值,若有错误,把错误代码打印出来;
2、wsprintf函数是针对UNICODE字符的吧?为什么不用sprintf
3、你的备注里说因为网络传送是低位先传送,正确的应该是网络字节序和主机字节序的问题,在网络上使用网络字节序,是高位先存。主机字节序其实又包括大端和小端,而htons, htonl, inet_addr, inet_ntoa, inet_ntol这些函数就是用于实现主机字节序和网络字节序的转换的,这些函数内部会根据大端还是小端来决定如何将数值转换成网络字节序。
socket_getpeername() 获取远程类似主机的ip地址
socket_getsockname() 获取本地socket的ip地址
怎么感觉你用的实际上是对的,难道用nginx一类的负载均衡服务器了
你是想知道代码还是想了解原理,一般的C/S模型都由客户端发出连接请求(客户端在代码中都是存有服务器端的具体ip地址和端口信息(也就是服务器端的INET协议族地址结构)的),当客户端发送连接请求后,服务器端通过accpet函数接收连接请求,accpet函数示例:accept(ServerSocket,(structsockaddr)&from,&len)(from是一个INET协议族地址结构变量,(structsockaddr)的作用是把INET协议族地址结构强制转换为通用地址结构),accpet函数在接收连接的同时会把客户端的具体ip和端口信息赋值给from,所以说客户端socket连接的ip(非绑定的话客户机随机绑定ip和端口)是包含在连接报文数据里,服务器端只有接收到客户端发送的连接信息后,才会获得客户端的ip和端口信息,获得具体ip的方式是通过函数,这个函数可以提取出IPv4地址结构中的点分十进制地址,函数用法:inet_ntoa(fromsin_addr)。
以上就是关于c#socket 服务器中怎么获得外网ip全部的内容,包括:c#socket 服务器中怎么获得外网ip、java socket点对点聊天 就跟QQ一样,怎么获取ip问题、怎么用Socket.RemoteEndPoint 获取客户端IP和端口 等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)