树莓派学习:socket获取客户端IP地址

定义

	int s_fd;//服务器套接字描述符
    int c_fd;//客户端套接字描述符
    
	int clen=sizeof(struct sockaddr_in);//地址结构体的大小

	struct sockaddr_in s_addr;//服务端socket地址结构体
	memset(&s_addr,0,clen);

	struct sockaddr_in c_addr;//客户端socket地址结构体
	memset(&c_addr,0,clen);

	char port[12] = "8088" ;//端口号
	
	char ipAddress[32] = "172.20.10.14" ;//ip地址

socket创建

s_fd = socket (AF_INET,SOCK_STREAM,0);
if(s_fd == -1)
{
	perror("socket");
	exit(-1);
}

写入服务端的ip地址和端口号

s_addr.sin_family=AF_INET;//将套接字地址结构体sin_family成员设置为AF_INET,表示这是一个IPv4地址
	
s_addr.sin_port=htons(atoi(port));//将端口号设置为从port变量中解析出来的值
	
inet_aton(ipAddress,&s_addr.sin_addr);//将IP地址设置为ipAddress变量解析得到的值,并存储在sin_addr成员中

将信息绑定到到socket

bind(s_fd,(struct sockaddr *)&s_addr,&clen);

listen开启监听

listen(s_fd,10);

等待accept连接

c_fd=accept(s_fd,(struct sockaddr *)&c_addr,&clen);

读取数据,发送数据,打印客户端ip地址



//获取客户端ip地址和端口号
char client_ip[INET_ADDRSTRLEN];//存放ip地址的缓存
inet_ntop(AF_INET, &(c_addr.sin_addr), client_ip, INET_ADDRSTRLEN);//将一个网络字节序的二进制IP地址转换为可读的字符串形式

int client_port = ntohs(c_addr.sin_port);//将16位整数由网络字节顺序转换为主机字节顺序

printf("Client IP Address: %s\n", client_ip);
printf("Client Port: %d\n", client_port);

//读取数据
char command[256] = {'\0'};
memset(command,'\0',sizeof(command));
n_read = read(c_fd,command,sizeof(command));

//发送数据
write(c_fd,command,sizeof(command));
memset(command,'\0',sizeof(command));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>