获得本机的用户名及IP地址函数
来源:互联网 发布:编程语言的都有啥 编辑:程序博客网 时间:2024/05/17 18:40
#include <cstdlib>#include <iostream>#include <conio.h>#include <stdio.h>#include <string.h>#include <winsock2.h> //Windows Sockets函数定义#include <stdlib.h>using namespace std;bool InitSocket(); //初始化Windows Sockets动态连接库#pragma comment(lib, "Ws2_32.lib")void GetIP(char ip[32]){ struct hostent *hp; struct in_addr in; char hostname[32]; int id=0;// 用于网卡计数 *ip=0; gethostname(hostname,31);//获得主机名 cout<<hostname<<endl; if((hp=gethostbyname(hostname))==NULL) { printf("ERROR: unable get host '%s' ip\n",hostname); return; }; while(hp->h_addr_list[id]!=NULL) { memcpy(&in.s_addr,hp->h_addr_list[id],sizeof(in.s_addr));//cout<<inet_ntoa(in)<<endl; strcpy(ip,inet_ntoa(in)); // printf("ip is %s\n",ip); id++; }};
如果在内网中,只能获得内网的IP地址~
下面是可用的服务器端程序,连接后会显示对方的IP地址,并将数据储存到txt中:
#include <cstdlib>#include <iostream>#include <conio.h>#include <stdio.h>#include <winsock2.h>#include <time.h>#include<ctime>bool InitSocket();using namespace std;#pragma comment(lib, "Ws2_32.lib")char ChangeIntToChar(int num){ char ch; if (num<10&&num>=0) ch=char(num+48); if (num<=15&&num>=10) ch=char(num+55); return ch;}int main(int argc, char *argv[]){ struct sockaddr addr; int len,off; bool over; char msg[255]; SOCKET sock ,sersock; if ( !InitSocket() ) return 0; //初始化Window Sockets DLL(ws2_32.dll) //创建流Socket:即传输层使用TCP sock = socket( AF_INET,SOCK_STREAM,0 ); if ( sock==INVALID_SOCKET ) //不能创建,返回 { printf("不能创建Socket!"); getch(); WSACleanup( ); //卸载Window Sockets DLL return 0; } //设置IP地址和端口号 ((sockaddr_in*)&addr)->sin_family = AF_INET; //AF_INET:使用Internet 协议 ((sockaddr_in*)&addr)->sin_port = htons(8080); //服务器端口号3000 ((sockaddr_in*)&addr)->sin_addr.s_addr = inet_addr("192.168.1.14");//主机地址 //把套接字与地址绑定 bind(sock,&addr,sizeof(addr)); //监听网络连接 listen(sock,1); //监听连接:1--允许等待队列的长度 printf("等待客户连接!\n"); SOCKADDR_IN addrClient; len = sizeof(addrClient); //接受网络连接,生成新的套接字sersock标识这一连接 sersock = accept( sock,(SOCKADDR*)&addrClient,&len ); //从等待队列中检取客户,如队列空则进程挂起 //如不空,则接受并生成新Socket以表示此连接,而原Socket继续等待新客户 if (sersock==INVALID_SOCKET) { DWORD err = WSAGetLastError(); char txt[100]; sprintf(txt,"error when accept!---errno:%d",err); printf(txt); getch(); WSACleanup( ); //卸载Window Sockets DLL return 0; } printf("有客户连接!\n"); cout<<"对方的地址为: "<<inet_ntoa(addrClient.sin_addr)<<endl; cout<<endl; int i=0; char temp_L=0; char temp_H=0; char a,b; int j; char temp_data[300]; time_t now_time; time_t last_time; char Datashow[128]; char Timeshow[128]; time_t ltime; FILE *fp; fp=fopen("D://text.txt","w"); while (1) { cout<<"等待数据..."<<endl; memset(msg,0,sizeof(msg)); memset(temp_data,0,sizeof(temp_data)); last_time= time(NULL); len = recv ( sersock,msg,200,0 ); //接收用户信息 for ( i=0,j=0;i<len;i++) { temp_L=msg[i]&0x0f; temp_H=msg[i]>>4; temp_H=temp_H&0x0f; a=ChangeIntToChar((int)temp_H); b=ChangeIntToChar((int)temp_L); temp_data[j++]=a; temp_data[j++]=b; cout<<a<<b<<" "; } cout<<endl; cout<<temp_data<<endl; now_time=time(NULL); if ((now_time-last_time)<=0) break; _strdate( Datashow ); printf( "OS date:%s\n", Datashow ); //打印当前日期 fputs(Datashow,fp); fputs(" ",fp); _strtime( Timeshow ); printf( "OS time:%s\n", Timeshow ); //打印当前时间 fputs(Timeshow,fp); fputs(" : \n",fp); fputs("\n当前数据是:",fp); for (int m=0;m<j;m++) { fprintf(fp, "%c", temp_data[m]); if (m%2!=0) { fputs(" ",fp); } } fputs("\n\n",fp); } fclose(fp); //关闭套接字 closesocket(sersock); closesocket(sock); WSACleanup( ); //卸载Window Sockets DLL return 0;}bool InitSocket(){ WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 2, 0 ); //初始化Windows Sockets DLL, err = WSAStartup( wVersionRequested, &wsaData );//加载Winsock DLL到内存 if ( err != 0 ) { printf("没有Windows Socket动态库!\n"); getch(); return false; } if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 0 ) { printf("需要Windows Socket 2!\n"); getch(); WSACleanup( ); //非winsock 2.0时,卸载Window Sockets DLL return false; } return true;}
0 0
- 获得本机的用户名及IP地址函数
- C#获得本机的计算机名及IP地址
- 获得本机的IP地址
- 获得本机的IP,机器名,客户端,用户名
- 获得本机IP地址
- 获得本机IP地址
- 获得本机IP地址
- linux下获得本机ip地址函数
- 获得本机的IP地址。子网掩码。广播地址
- 获得本地的ip地址和用户名
- 获得及设置本机的ip地址,子网掩码,网关,dns服务器信息
- [.Net码农]C#获得本机的计算机名及IP地址
- pb中获得本机IP地址的另一个方法
- C#获得本机的公网IP地址
- 获得本主机的IP地址
- 获得本机IP地址(c语言)
- 如何获得本机IP地址
- 如何获得本机IP地址
- 两种设计模式(解藕)
- xcode两个模拟器同时开的bug
- hdu-1163-Eddy's digital Roots
- oj n
- HDOJ题目3783 ZOJ(水题)
- 获得本机的用户名及IP地址函数
- 改变UITextField placeHolder颜色、字体
- git冲突时的处理
- 指针
- Pelican 的Windows 入门教程
- dij 邻接表
- “华夏”从何而来
- 谈谈开源技术选型
- 用C#去除字符串中HTML的格式(清除数据库中html标签)