如何获取Client和Server自己的还有对方的IP/port
来源:互联网 发布:win10 卸载软件 编辑:程序博客网 时间:2024/06/07 19:05
今天同了个问题, 说如何得到Client自己的source IP和Port。
之前都是server端去读取client的IP和Port。搞了个小程序试试,果然是可以拿到的。话不多说上code。
Note:build option
g++ $filename -std=c++11 -lpthread
#include <stdio.h> #include <string.h> // for memset(), bzero... #include <sys/socket.h> // for socket(), bind(), and connect()... #include <arpa/inet.h> // for sockaddr_in and inet_ntoa()...#include <thread>#include <unistd.h>#define MAXPENDING 10 int client(void){ int sock; // Socket descriptor. struct sockaddr_in serverAddress; const char* serverIP = "127.0.0.1"; unsigned short serverPort = 1234; // Create a reliable, stream socket using TCP. sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); // Set server address info. memset(&serverAddress, 0, sizeof(serverAddress)); // Init. serverAddress.sin_family = AF_INET; // Internet address family. serverAddress.sin_addr.s_addr = inet_addr(serverIP); // IP. serverAddress.sin_port = htons(serverPort); // Port. // Connect to server. connect(sock, (struct sockaddr*) &serverAddress, sizeof(serverAddress)); // Get client IP:Port and Server IP:Port. struct sockaddr_in c, s; socklen_t cLen = sizeof(c); socklen_t sLen = sizeof(s); getsockname(sock, (struct sockaddr*) &c, &cLen); getpeername(sock, (struct sockaddr*) &s, &sLen); printf("Client:::>Client: %s:%d\nServer: %s:%d\n", inet_ntoa(c.sin_addr), ntohs(c.sin_port), inet_ntoa(s.sin_addr), ntohs(s.sin_port)); // Send data to server. char buffer[100]; int i = 0; for (i = 0; i < 99; i++) { buffer[i] = 'a'; } buffer[99] = '\0'; send(sock, buffer, sizeof(buffer), 0); // Close. close(sock); return 0; }int server(){ int listenSock, connectSock; struct sockaddr_in serverAddress; unsigned short serverPort = 1234; // Create socket to listen incoming connections. listenSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); // Set local address info. memset(&serverAddress, 0, sizeof(serverAddress)); // Init. serverAddress.sin_family = AF_INET; // Internet address family. serverAddress.sin_addr.s_addr = htonl(INADDR_ANY); // Any available interface. 0.0.0.0 serverAddress.sin_port = htons(serverPort); // Port. // Bind to the local address. bind(listenSock, (struct sockaddr*) &serverAddress, sizeof(serverAddress)); // Listen. listen(listenSock, MAXPENDING); struct sockaddr_in clientAddress; socklen_t clientLen = sizeof(clientAddress); char buffer[1000]; bzero(buffer, sizeof(buffer)); // Accept. printf("Waiting connection...\n"); connectSock = accept(listenSock, (struct sockaddr*) &clientAddress, &clientLen); // Get client IP:Port and Server IP:Port. struct sockaddr_in c, s; socklen_t cLen = sizeof(c); socklen_t sLen = sizeof(s); getsockname(connectSock, (struct sockaddr*) &s, &sLen); // ! use connectSock here. getpeername(connectSock, (struct sockaddr*) &c, &cLen); // ! use connectSock here. printf("Server:::>Client: %s:%d\nServer: %s:%d\n", inet_ntoa(c.sin_addr), ntohs(c.sin_port), inet_ntoa(s.sin_addr), ntohs(s.sin_port)); // Receive message. recv(connectSock, buffer, sizeof(buffer), 0); printf("Receive Message: %s\n", buffer); return 0;}int main(int argc, char** argv) {std::thread Server_thread(server);sleep(2);std::thread Client_thread(client);sleep(10);Server_thread.join();Client_thread.join();return 0;}
0 0
- 如何获取Client和Server自己的还有对方的IP/port
- linux socket编程client获取使用的ip和port
- java 如何获取对方的IP
- nodejs 如何获取对方的IP地址
- 通过网络socket获取对方 ip 和port
- Linux网络编程----bind自动获取自己的IP和PORT,端口使用的注意事项
- 通过IP和socket获取对方的MAC地址
- 通过对方的请求 获取对方的ip地址
- jsp中获取对方ip的方法
- 获取对方IP的几种方法
- udp 获取对方ip的方法
- Socket编程:得到本地Server主机IP和对方Client主机IP
- Binder通过智能指针来实现server和client相互监控对方的退出
- MFC如何获取自己电脑的IP地址和主机名
- 还有的身份和股东法国如果对方
- 查看对方mac地址及本机查询自己的MAC和IP
- java获取request的 ip port
- 在网络通讯中,如何自己分配可用的端口号和获取自己的ip地址
- 普元EOS Platform产品支持环境
- 高精度除以高精度
- Jquery表单验证插件–Validform
- maven出错
- php锁定记录,防止多人操作
- 如何获取Client和Server自己的还有对方的IP/port
- 加载更多
- unity3d-配置Android环境,打包发布Apk流程详解
- IT人不要一直做技术
- linux module解析
- 如果你喜欢销售,那么你一定要看!经典之作!
- Android 编程下通过 Theme 和 Style 避免 APP 启动闪黑屏或者白屏,快速启动
- Nginx+tomcat实现集群和负载均衡
- 使用sklearn进行文本TF-IDF处理