LINUX TCP客服端连接服务器后,怎么获取连接使用的本地IP?

hell_wolf 2013-04-01 03:40:44
connect(fd, (struct sockaddr *)&addr, sizeof(struct sockaddr_in)) 连接服务器之后,怎么通过fd获取本地IP,就是怎么知道用的是哪个网卡的IP去连接服务器的?
...全文
309 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
e_play 2013-04-02
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
system("netstat -na >netstat.txt"); //然后读文件netstat.txt的内容
是的
hell_wolf 2013-04-02
  • 打赏
  • 举报
回复
引用 6 楼 AnYidan 的回复:
C/C++ code ? 123456789101112131415161718192021222324252627 /* tcp_server - set up for a TCP server */SOCKET tcp_server( char *hname, char *sname ) { struct sockaddr_in local; SOCKET……
这个怎么获取客服端IP ?
AnYidan 2013-04-01
  • 打赏
  • 举报
回复

/* tcp_server - set up for a TCP server */
SOCKET tcp_server( char *hname, char *sname )
{
	struct sockaddr_in local;
	SOCKET s;
	const int on = 1;

	set_address( hname, sname, &local, "tcp" );
	s = socket( AF_INET, SOCK_STREAM, 0 );
	if ( !isvalidsock( s ) )
		error( 1, errno, "socket call failed" );

	if ( setsockopt( s, SOL_SOCKET, SO_REUSEADDR,
		( char * )&on, sizeof( on ) ) )
		error( 1, errno, "setsockopt failed" );

	if ( bind( s, ( struct sockaddr * ) &local,
		 sizeof( local ) ) )
		error( 1, errno, "bind failed" );

	if ( listen( s, NLISTEN ) )
		error( 1, errno, "listen failed" );

	return s;
}


mzz_810 2013-04-01
  • 打赏
  • 举报
回复
引用 2 楼 justkk 的回复:
试试 getsockname
顶 如果要获取对端IP请用getpeername
hnzmdzcm 2013-04-01
  • 打赏
  • 举报
回复

#include <netdb.h>

struct hosent* gethostent(void);

struct hostent {
        char    *h_name;        /* official name of host */
        char    **h_aliases;    /* alias list */
        int     h_addrtype;     /* host address type */
        int     h_length;       /* length of address */
        char    **h_addr_list;  /* list of addresses */
};
赵4老师 2013-04-01
  • 打赏
  • 举报
回复
system("netstat -na >netstat.txt"); //然后读文件netstat.txt的内容
justkk 2013-04-01
  • 打赏
  • 举报
回复
试试 getsockname
恨天低 2013-04-01
  • 打赏
  • 举报
回复
客户端程序可以用bind()来绑定
NB-IoT现阶段访问一个服务器只能通过IP地址加口的方式,省去了DNS解析,如果产品以后的IP变化或者改变了服务IP地址,就需要一个DNS解析的功能。 通过DNS解析某个域名的IP地址,获取IP地址后再进行通信。 如果NB-IoT模块只能绑定一个IP,则可以通过这个IP获取其他IP列表,然后统一经过这个IP进行转发。 参考: 1.1.2 NB卡准备 模组使用的SIM卡为中国电信物联网专用NB卡,如下图正面(留意NB字样,无此字样的均为不合法的NB卡): 背面(留意其ICCID号,在让运营商开放IP白名单时可能需要此号码,相当于手机卡的手机号): 重要:收到卡后,需要致电背面的客服电话, 使其将您自己的IP地址加入访问白名单,此一步完成后,方能进行下面的步骤,切记切记 。 如何判定服务器IP已被加入访问白名单,使用如下两种方式: 1. AT+NPING 指令,通过PING自己的服务器地址,如返回ERROR,则多半(尚需继续排除防火墙因素)未就绪; 2. UDP通讯,如能与自己的服务器直接连接UDP通讯,那可以证明一定就绪; 1.1.3 服务器准备  首先您需要有一个固定IP的公网服务器,由于目前BC95暂不支持域名解析,故必须使用IP地址配置方式。  服务器可以使用阿里云服务器,目前本CoAP暂未开源,有Windows 32位、Windows 64位、Linux CentOS 6、CentOS 7的可执行文件,请暂时选择以上指定系统;  CoAP标准协议使用 UDP 5683 口,当然您也可以自定义此口,必须让防火墙放通UDP 的指定口;  CoAP网关需要使用WEB方式进行设备管理、用户管理等,默认使用 TCP 8080 口,同 理,防火墙必须放通此口; 1.1.4 模组准备 推荐使用 串口调试助手 sscom 来调试NB模组,如下,首先将您的NB模组上电使其启动,使用AT指令能收到OK的回复,证明已启动完毕,按如下步骤进行: 基础配置 1. 配置 NCDP 服务器使用的指令序列为 AT+CFUN=0 +NCDP=103.37.149.19,5683 AT+NRB 留意 IP 地址必须为您自己指定的IP地址,如果暂时没有,也可以用 如上 地址临时使用(但 WEB 设备管理地址也需换成这个IP),完成后重启了设备; 2. 等待设备附着网络后,使用 AT+NPING=103.37.149.19 尝试PING自己的服务器,当返回ERROR时,极有可能是 IP 白名单未成功配置的缘故; 3. 使用 AT+CGSN=1 查询设备 IMEI 号,并将设备的 IMEI 注册到 WEB 平台,如果在上面操作 过,可忽略。

70,026

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧