赞
踩
目录
一台联网设备的 IP地址 就像是它的身份证号,组成身份证号的各个数字有以下意义:
第1、2位数字表示:所在省份的代码;第3、4位数字表示:所在城市的代码;第5、6位数字表示:所在区县的代码;第7~14位数字表示:出生年、月、日;第15~17位数字为顺序码,表示同一区域内同年同月同日出生的顺序号,其中第17位数字表示性别,奇数表示男性,偶数表示女性;第18位数字是校检码。
可以看到,在没见到本人,只知道你的身份证号的情况下,通过前六位数字,我们可以确定你的出生地址,精确到区县;而通过之后的数字,我们可以确定你的出生日期以及你的性别。同样地,IP地址有类似的作用:
IP地址的数字前面部分代表网络号也就网络地址,后面部分代表主机号也就是主机地址,至于哪些代表网络号就需要看子网掩码了。所以ip地址的数字含义是需要根据子网掩码判断的。就像快递地址一样,为了相互快递东西,也就是传递数据。
那怎么获取本机的 IP 地址呢?首先,网络上搜索 IP 会有:
不过,这样得到的 IP 地址用不了,接下来介绍另一种获取本机 IP 地址的方法:
在空白桌面按下 win键+R键 ,桌面左下角会有窗口跳出,
输入 "cmd",点击确定,跳出控制台窗口,
再输入 "ipconfig",按下 Enter键 就得到了我们要的结果:
图片对于一些隐秘信息进行了擦除,可以看到 IPv4 地址即是我们需要的 IP 地址。图中的 IPv4 地址是以点分十进制表示出来的,这指的是IPv4地址本身共有32个二进制位表示,将8个二进制位划为一组后得到四组,每组用十进制表示出来,每组之间用点分开,得到的便是IP地址的点分十进制形式。
- //服务器端
- #include<stdio.h>
- #include<winsock.h>
- int main()
- {
- char Sendbuf[100];
- char Receivebuf[100];
- int SendLen;
- int ReceiveLen;
- int Length;
-
- SOCKET socket_server;
- SOCKET socket_receive;
-
- SOCKADDR_IN Server_add;
- SOCKADDR_IN Client_add;
-
- WORD wVersionRequested;
- WSADATA wsaData;
- int error;
-
- wVersionRequested = MAKEWORD(2, 2);
- error = WSAStartup(wVersionRequested, &wsaData);
- if (error != 0)
- {
- printf("加载套接字失败!");
- return 0;
- }
- if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)
- {
- WSACleanup();
- return 0;
- }
- Server_add.sin_family = AF_INET;
- Server_add.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
- Server_add.sin_port = htons(5000);
- socket_server = socket(AF_INET, SOCK_STREAM, 0);
-
- if (bind(socket_server, (SOCKADDR*)&Server_add, sizeof(SOCKADDR)) == SOCKET_ERROR)
- {
- printf("绑定失败\n");
- }
-
- if (listen(socket_server, 5) < 0)
- {
- printf("监听失败\n");
- }
-
- Length = sizeof(SOCKADDR);
- socket_receive = accept(socket_server, (SOCKADDR*)&Client_add, &Length);
- if (socket_receive == SOCKET_ERROR)
- {
- printf("接受连接失败");
- }
- while (1)
- {
- ReceiveLen = recv(socket_receive, Receivebuf, 100, 0);
- if (ReceiveLen < 0)
- {
- printf("接收失败\n");
- printf("程序退出\n");
- break;
- }
- else
- {
- printf("client says: %s\n", Receivebuf);
- }
-
- printf("please enter message:");
- scanf("%s", Sendbuf);
- SendLen = send(socket_receive, Sendbuf, 100, 0);
- if (SendLen < 0)
- {
- printf("发送失败\n");
- }
- }
- closesocket(socket_receive);
- closesocket(socket_server);
- WSACleanup();
- return 0;
- }
- //客户端
- #include<stdio.h>
- #include<winsock.h>
- int main()
- {
- char Sendbuf[100];
- char Receivebuf[100];
- int SendLen;
- int ReceiveLen;
-
- SOCKET socket_send;
- SOCKADDR_IN Server_add;
-
- WORD wVersionRequested;
- WSADATA wsaData;
- int error;
-
- wVersionRequested = MAKEWORD(2, 2);
- error = WSAStartup(wVersionRequested, &wsaData);
- if (error != 0)
- {
- printf("加载套接字失败!");
- return 0;
- }
-
- if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)
- {
- WSACleanup();
- return 0;
- }
-
- Server_add.sin_family = AF_INET;
- Server_add.sin_addr.S_un.S_addr = inet_addr("192.122.0.104");
- //各位博友注意:192.122.0.104 只是一个博主随便写的 IP地址,此处的IP地址各位博友
- //可以自己通过上面的方法得到自己PC机的IP地址,通过这个,各位博友能够实现自己同时
- //是客户端和服务器端。
- Server_add.sin_port = htons(5000);
- socket_send = socket(AF_INET, SOCK_STREAM, 0);
-
- if (connect(socket_send, (SOCKADDR*)&Server_add, sizeof(SOCKADDR)) == SOCKET_ERROR)
- {
- printf("连接失败\n");
- }
-
- while (1)
- {
- printf("please enter message:");
- scanf("%s", Sendbuf);
- SendLen = send(socket_send, Sendbuf, 100, 0);
- if (SendLen < 0)
- {
- printf("发送失败\n");
- }
- ReceiveLen = recv(socket_send, Receivebuf, 100, 0);
- if (ReceiveLen < 0)
- {
- printf("接受失败\n");
- printf("程序退出\n");
- break;
- }
- else
- {
- printf("Server says: %s\n", Receivebuf);
- }
- }
- closesocket(socket_send);
- WSACleanup();
- return 0;
- }
注:以上代码摘自明日科技著《C语言从入门到精通》
我们的客户端是要用到 IP地址的,至于在哪里要用到,在客户端的代码中已有注释。以上的代码需各位博友建在两个项目里,需要开两个执行界面,否则会引起冲突,切记切记。另外,还需各位博友自己在两个项目的属性一栏中有所操作才能使用,步骤如下:
点击后出现一个窗口,点击链接器一栏旁边的三角形,再点击下属项输入,之后再点击页面中的附加依赖项一栏,点击右边的小箭头,然后点击编辑,大概图样如下:
之后出现界面:
记得输入 "ws2_32.lib" ,点击确定,就大功告成了。执行程序时,先执行服务器端,再执行客户端。
如果有的博友发现电脑仍然出现运行不了,建议先确认 IP地址 是自己的电脑的,并且以点分十进制形式正确输入;如果这没问题,建议看一下编译器类型,博主用的是VS2017, VS系列估计没问题,其它的如 Dev-C++ 应该也没问题;如果仍然不行,直接在网上搜索下载 ws2_32.lib 这个动态库文件。
放几张成功运行程序后的图片:
在未执行客户端程序之前,服务器端程序执行后的控制台画面如上是空白的,接下来启动客户端程序,客户端程序执行后的画面是这样的:
我们在客户端输入信息:
服务器端接收到信息的画面为:
我们继续在服务器端输入信息:
在客户端会得到回信:
这样,简单的话语交流功能就算是完成了。
欢迎指正我的上一篇博客:函数×指针(C语言)
我的下一篇博客:链表的实现(C语言)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。