关于socket编程获取客户端地址笔记

因为最近刚好碰到这块,而且很不小心的在上面踩了个坑,所以记录下来这个坑

首先,在我们都是在accept函数以后来获取客户端的地址:

client_sd = accept(watcher->fd, (struct sockaddr*) &client_addr, &client_len);

在服务端接收到accept以后,会使用结构体 struct sockaddr *来存储客户端的地址信息

我们可以通过inet_ntoa(client_addr.sin_addr)来获取到客户端ip(点分十进制字符串);

我在使用的时候,每次执行到inet_ntoa时候都会(Segmentation Fault)段错误,当时整个人都斯巴达了;

网上查了下资料发现,inet_ntoa就是这么用啊?????  so???

sprintf(node->client_addr,"%s",inet_ntoa(client_addr.sin_addr));

最后在发现,坑在这里。。。

使用inet_ntoa必须添加头文件#include <arpa/inet.h>

在编译没有开警告的情况下  程序运行到这里就会Segmentation Fault

所有,在平时最好还是开启编译器警告比较好,不然这些问题真的很。。。。

时间: 2024-11-10 07:11:32

关于socket编程获取客户端地址笔记的相关文章

socket.io获取客户端的IP地址(修正官方1.0.4版本BUG)

之前我有看过别人写的文章,说到如何获取客户端IP地址,代码如下: var io = require("socket.io").listen(server); io.sockets.on("connection", function (socket) { var address = socket.handshake.address; console.log("New connection from " + address.address + &qu

【windows socket编程+服务器客户端】

Windows Socket编程与服务器客户端示例 Winsock是 Windows下套接字标准. Socket套接字基于计算机网络,提供同一系统上不同进程或由局域网连接在一起的不同机器上的进程间通讯功能.如下图: 套接字通过IP地址,Port端口号标识,通过这个标识可以在整个局域网定位一个套接字,通过套接字进程便可以相互传输数据.如:进程A与进程B之间欲通过套接字通信,首先进程A创建一个有IP地址,端口号唯一标识的套接字,进程B同样创建一个有IP地址,端口号唯一标识的套接字,进程A,B便可以通

python--DenyHttp项目(1)--socket编程:客户端与服务器端

查找了许多资料,实现了客户端与服务器端的连接,通过虚拟机进行测试 服务器端IP:192.168.37.129 端口1122 客户端IP: 192.168.37.1 端口1122 Server: #coding:utf-8 from socket import * class Dserver(): def __init__(self): self.HOST = '192.168.37.129' self.PORT = 1122 self.BUFSIZE = 1024 self.ADDR = (se

在Linux上使用C编程获取IPv4地址及子网掩码

在Linux上(如Ubuntu或CentOS), 获取某个Network Interface比如eth0的IP地址等信息,我们可以使用ifconfig或者ip addr show命令. $ ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:25:64:ba:8d:be inet addr:192.168.1.102 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::225:64ff:f

python socket编程之客户端和服务端简单交互

服务端 #_*_ coding:utf-8 _*_ #导入socket模块 import socket # 创建socket对象 sk = socket.socket() #绑定侦听的IP和端口号 ip_port = ('192.168.9.213',9999) sk.bind(ip_port) #最大连接数 sk.listen(5) #接受请求,接受请求的时候可以获取到客户端的socket对象,以及客户端的IP和端口 #通过while循环,让服务端一直接受客户端请求 print "正在等待客户

C#版 Winform界面 Socket编程 Client客户端

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; using Sys

socket编程中客户端常用函数 以及简单实现

1 常用函数 1.1   connect() int connect(int sockfd, const struct sockaddr *servaddr, socklen_taddrlen); 客户端需要调用connect()连接服务器,connect和bind的参数形式一致,区别在于bind的参数是自己的地址,而connect的参数是对方的地址.connect()成功返回0,出错返回-1. 1.2   bind():很少用 由于客户端不需要固定的端口号,因此不必调用bind(),客户端的端

socket 编程 服务器端-客户端

/**** 服务器端代码 *****/ #include<sys/types.h>#include<sys/socket.h>#include<stdio.h>#include<netinet/in.h>#include<arpa/inet.h>#include<unistd.h>#define PORT 3339int main(void){ char *sendbuf = "thanks"; char buf[

026.1 网络编程 获取IP地址

前面提及的:OSI,TCP-IP,IP地址,端口,协议概念我都清楚,所以我直接跳过前面,来到使用这里. //获取本机IP InetAddress ip = InetAddress.getLocalHost(); System.out.println(ip); //***/169.254.93.173 String sip = ip.getHostAddress(); String name = ip.getHostName(); System.out.println(name+" "+