socket accept-getsocketname取得的IP = 0

问题描述

getsocketname取得的IP = 0 1C
A、B两个客户端IP相同,client A与服务端S连接成功,能收发消息。这个时候,client B试图连接S(connect的IP跟端口都相同),服务端监听,B与S成功连接,Accept一个新的文件描述符,从该文件描述符中取得服务端的IP。client A则掉线,recv显示服务端关闭连接,接着A试图去连接S,连接失败,错误是超时,但是服务端能accept成功返回新的文件描述符,不过调用getsocketname取得的IP = 0。请大神给出合理的解释。

解决方案

参考
getsockname always returning 0.0.0.0?
获取IP地址getsockname gethostname
你的服务器端socket绑定的是指定地址还是任意地址?如果是addr.sin_addr.s_addr = INADDR_ANY;

gethostname 你只要初始化了winsock库就可以直接使用上述代码得到本机的IP了(在linux中不需要直接用)。但是getsockname方式来获取对应的 IP地址的时候,首先需要通过socket函数创建的有效的套接字,另外还要bind。才能执行成功。如果在socket和bind之间调用就会调用失 败。虽然在bind之后可以执行成功,通常我们得到的结果是0.0.0.0,除非在bind的时候就指定特定的IP。

时间: 2024-08-02 19:05:11

socket accept-getsocketname取得的IP = 0的相关文章

服务器-java中把Socket.accept放入多线程中 如果一个客户端连入 那么会接入哪一个线程中呢

问题描述 java中把Socket.accept放入多线程中 如果一个客户端连入 那么会接入哪一个线程中呢 如题 自己测试出来是连接不到 不明白 ................... .................... 解决方案 linux C中的accept函数它的其中一个参数struct sockaddr是一个结构体,该结构体中的一个字段记录了连接上来的客户端的IP地址和端口号等信息, 你只需要访问该结构体中的这个字段就好了 accept( SOCKET s, struct sock

使用代理的如何知道本地的ip来进行tcpip编程,我用socket.getLocalAddress().getHostAddress()得到4个0

问题描述 如题所述.importjava.net.*;classIPDemo{publicstaticvoidmain(String[]args)throwsException{DatagramSocketsocket=newDatagramSocket();System.out.println(socket.getLocalAddress().getHostAddress());}} 得到的结果为0.0.0.0,使用代理的如何查找ip,或者代理的tcpip怎么编写程序?

求助:关于异步多线程Socket已连接的客户端IP地址和端口

问题描述 如题,网上找了1个异步多线程的C#代码.可以实现客户端连接后客户端发送的数据再发送回去.但是我不知道怎么能把连接到这个服务器的客户端的IP显示出来,断开时候也有个提示,此外,比如说这个客户端连接了4个客户端,我想对第2个客户端主动发送数据怎么弄?求助usingSystem;usingSystem.Net;usingSystem.Net.Sockets;usingSystem.Text;usingSystem.Threading;//Stateobjectforreadingclient

Windows Socket网络编程(一) TCP/IP体系结构、特点及相关

一.TCP/IP 体系结构与特点 1.TCP/IP体系结构 TCP/IP协议实际上就是在物理网上的一组完整的网络协议.其中TCP是提供传输层服务,而IP则是提供网络层服务.TCP/IP包括以下协议:(结构如图1.1) (图1.1) IP:网间协议(Internet Protocol) 负责主机间数据的路由和网络上数据的存储.同时为ICMP,TCP,UDP提供分组发送服务.用户进程通常不需要涉及这一层. ARP:地址解析协议(Address Resolution Protocol) 此协议将网络地

请问socket 我的accept() 为什么出错了?

问题描述 请问socket 我的accept() 为什么出错了? 望大神指点迷津 服务端: #include<stdio.h> #include<stdlib.h> #include<string.h> #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #include<arpa/inet.h> //#include<mysql/m

Http、TCP/IP协议与Socket之间的区别

网络由下往上分为: 物理层-- 数据链路层-- 网络层-- IP协议 传输层-- TCP协议 会话层-- 表示层和应用层-- HTTP协议 1.TCP/IP连接 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接.TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在"无差别"的网络之上. 建立起一个TCP连接需要经过"三次握手": 第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态

C#开发之Socket网络编程TCP/IP层次模型、端口及报文等探讨_C#教程

1.TCP/IP层次模型 当然这里我们只讨论重要的四层 01,应用层(Application):应用层是个很广泛的概念,有一些基本相同的系统级TCP/IP应用以及应用协议,也有许多的企业应用和互联网应用.http协议在应用层运行. 02,传输层(Tanspot):传输层包括UDP和TCP,UDP几乎不对报文进行检查,而TCP提供传输保证. 03,网络层(Netwok):网络层协议由一系列协议组成,包括ICMP.IGMP.RIP.OSPF.IP(v4,v6)等. 04,链路层(Link):又称为物

socket跟TCP/IP 的关系,单台服务器上的并发TCP连接数可以有多少

常识一:文件句柄限制 在linux下编写网络服务器程序的朋友肯定都知道每一个tcp连接都要占一个文件描述符,一旦这个文件描述符使用完了,新的连接到来返回给我们的错误是"Socket/File:Can'topen so many files". 这时你需要明白操作系统对可以打开的最大文件数的限制. 进程限制 执行ulimit -n 输出1024,说明对于一个进程而言最多只能打开1024个文件,所以你要采用此默认配置最多也就可以并发上千个TCP连接. 临时修改:ulimit -n10000

php mysql localhost,127.0.0.1和ip区别_Mysql

一家之言: localhost与127.0.0.1的区别 localhost与127.0.0.1的区别是什么?相信有人会说是本地ip,曾有人说,用127.0.0.1比localhost好,可以减少一次解析.看来这个入门问题还有人不清楚,其实这两者是有区别的. no1: localhost也叫local ,正确的解释是:本地服务器127.0.0.1在windows等系统的正确解释是:本机地址(本机服务器) no2: localhot(local)是不经网卡传输!这点很重要,它不受网络防火墙和网卡相