概述
获取对端IP,端口信息
- 获取对端IP端口信息
-
- 服务器端
- 客户端
- 各种转换
- 点分十进制的ip转网络ip
- 特别的用宏设置ip
- 网络ip转点分十进制的ip
- 端口的转换
- 点分十进制的ip转网络ip
-
服务器端
#include "myhead.h"
int tcpsock;
int newsock;
void fun(int sig)
{
close(tcpsock);
close(newsock);
exit(0);
}
// tcp服务器端程序
int main()
{
// 捕捉ctrl+c
signal(SIGINT,fun);
int ret;
char buf[50];
bzero(buf,50);
//定义ipv4类型的地址结构体
struct sockaddr_in myaddr;
struct sockaddr_in clientaddr;
bzero(&myaddr,sizeof(struct sockaddr_in));
myaddr.sin_family=AF_INET; //ipv4地址协议
myaddr.sin_port=htons(10000); //字节序的转换 主机转换成网络字节序
// 点分十进制的ip转换成网络字节序32位ip的四种写法
//写法一inet_pton(AF_INET,"192.168.1.3",&(myaddr.sin_addr));
//写法二inet_aton("192.168.1.3",&(myaddr.sin_addr));
//写法三myaddr.sin_addr.s_addr=htonl(INADDR_ANY);
myaddr.sin_addr.s_addr=inet_addr("192.168.1.16");//方法四
int sockaddlen=sizeof(struct sockaddr);
//创建TCP类型的套接字(数据流套接字)
tcpsock=socket(AF_INET,SOCK_STREAM,0);
if(tcpsock==-1)
{
perror("create socket failed!n");
return -1;
}
//绑定
ret=bind(tcpsock,(struct sockaddr *)&myaddr,sockaddlen);
//监听
listen(tcpsock,5);
newsock=accept(tcpsock,(struct sockaddr *)&clientaddr,&sockaddlen);
// 网络字节序ip转换成点分十进制ip的两种写法
printf("目前连接上服务器的客户端ip是:%sn",inet_ntoa(clientaddr.sin_addr));
//char ipbuf[16];
//bzero(ipbuf,16);
//printf("ip is:%sn",inet_ntop(AF_INET,&(clientaddr.sin_addr),ipbuf,16));
//printf("ipbuf is:%sn",ipbuf);
//printf("客户端的IP号是:%dn",ntohl(clientaddr.sin_addr.s_addr));
//返回值是主机字节序32位的,不是我们熟悉的点分十进制
printf("客户端的端口号是:%uhn",ntohs(clientaddr.sin_port));
//下面这种也会显示数字,可是显示的数字不是给人看到,是电脑看到
//printf("客户端的端口号是:%uhn",clientaddr.sin_port);
//接收连接请求
while(1)
{
printf("input string!n");
scanf("%s",buf);
write(newsock,buf,50);
}
}
客户端
#include "myhead.h"
// tcp客户端程序
int main()
{
int ret;
char buf[50];
bzero(buf,50);
//定义ipv4类型的地址结构体
struct sockaddr_in myaddr;
bzero(&myaddr,sizeof(struct sockaddr_in));
myaddr.sin_family=AF_INET; //ipv4地址协议
myaddr.sin_port=htons(10000); // 服务器端口号
myaddr.sin_addr.s_addr=inet_addr("192.168.1.16"); // 服务器的ip地址
int tcpsock;
int newsock;
int sockaddlen=sizeof(struct sockaddr);
//创建TCP类型的套接字(数据流套接字)
tcpsock=socket(AF_INET,SOCK_STREAM,0);
if(tcpsock==-1)
{
perror("create socket failed!n");
return -1;
}
connect(tcpsock,(struct sockaddr *)&myaddr,sockaddlen);
while(1)
{
ret=read(tcpsock,buf,50);
if(ret==0)
{
printf("server is disconnect!n");
break;
}
printf("recv is:%sn",buf);
}
close(tcpsock);
return 0;
}
各种转换
点分十进制的ip转网络ip
点分十进制的ip转换成网络字节序32位ip的3种写法
inet_pton(AF_INET,"192.168.1.3",&(myaddr.sin_addr));
inet_aton("192.168.1.3",&(myaddr.sin_addr));
myaddr.sin_addr.s_addr=inet_addr("192.168.1.16");
特别的用宏设置ip
myaddr.sin_addr.s_addr=htonl(INADDR_ANY);
网络ip转点分十进制的ip
网络字节序ip转换成点分十进制ip的两种写法
//方法1
printf("目前连接上服务器的客户端ip是:%sn",inet_ntoa(clientaddr.sin_addr));
//方法2
char ipbuf[16];
bzero(ipbuf,16);
printf("ip is:%sn",inet_ntop(AF_INET,&(clientaddr.sin_addr),ipbuf,16));
printf("ipbuf is:%sn",ipbuf);
//方法3
printf("客户端的IP号是:%dn",ntohl(clientaddr.sin_addr.s_addr));
端口的转换
myaddr.sin_port=htons(10000); //字节序的转换 主机转换成网络字节序
printf("客户端的端口号是:%uhn",ntohs(clientaddr.sin_port));
最后
以上就是踏实美女为你收集整理的获取对端IP,端口信息获取对端IP,端口信息的全部内容,希望文章能够帮你解决获取对端IP,端口信息获取对端IP,端口信息所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复