目录
IP地址简介:
服务器端:
客户端:
提示:
IP地址简介:
一台联网设备的 IP地址 就像是它的身份z号,组成身份z号的各个数字有以下意义:
第1、2位数字表示:所在省份的代码;第3、4位数字表示:所在城市的代码;第5、6位数字表示:所在区县的代码;第7~14位数字表示:出生年、月、日;第15~17位数字为顺序码,表示同一区域内同年同月同日出生的顺序号,其中第17位数字表示性别,奇数表示男性,偶数表示女性;第18位数字是校检码。
可以看到,在没见到本人,只知道你的身份z号的情况下,通过前六位数字,我们可以确定你的出生地址,精确到区县;而通过之后的数字,我们可以确定你的出生日期以及你的性别。
同样地,IP地址有类似的作用:
IP地址的数字前面部分代表网络号也就网络地址,后面部分代表主机号也就是主机地址,至于哪些代表网络号就需要看子网掩码了。所以ip地址的数字含义是需要根据子网掩码判断的。就像快递地址一样,为了相互快递东西,也就是传递数据。
那怎么获取本机的 IP 地址呢?
首先,网络上搜索 IP 会有
不过,这样得到的 IP 地址用不了,接下来介绍另一种获取本机 IP 地址的方法:
在空白桌面按下 win键+R键 ,桌面左下角会有窗口跳出,
输入 "cmd",点击确定,跳出控制台窗口,
再输入 "ipconfig",按下 Enter键 就得到了我们要的结果:
图片对于一些隐秘信息进行了擦除,可以看到 IPv4 地址即是我们需要的 IP 地址。
图中的 IPv4 地址是以点分十进制表示出来的,这指的是IPv4地址本身共有32个二进制位表示,将8个二进制位划为一组后得到四组,每组用十进制表示出来,每组之间用点分开,得到的便是IP地址的点分十进制形式。
服务器端://服务器端 #include客户端:#include 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: %sn", 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#include 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: %sn", Receivebuf); } } closesocket(socket_send); WSACleanup(); return 0; }
注:以上代码摘自明日科技著《C语言从入门到精通》
提示:我们的客户端是要用到 IP地址的,至于在哪里要用到,在客户端的代码中已有注释。以上的代码需各位博友建在两个项目里,需要开两个执行界面,否则会引起冲突,切记切记。
另外,还需各位博友自己在两个项目的属性一栏中有所 *** 作才能使用,步骤如下:
点击后出现一个窗口,点击链接器一栏旁边的三角形,再点击下属项输入,之后再点击页面中的附加依赖项一栏,点击右边的小箭头,然后点击编辑,大概图样如下:
之后出现界面:
记得输入 "ws2_32.lib" ,点击确定,就大功告成了。
执行程序时,先执行服务器端,再执行客户端。
如果有的博友发现电脑仍然出现运行不了,建议先确认 IP地址 是自己的电脑的,并且以点分十进制形式正确输入;如果这没问题,建议看一下编译器类型,博主用的是VS2017, VS系列估计没问题,其它的如 Dev-C++ 应该也没问题;如果仍然不行,直接在网上搜索下载 ws2_32.lib 这个动态库文件。
放几张成功运行程序后的图片:
在未执行客户端程序之前,服务器端程序执行后的控制台画面如上是空白的,接下来启动客户端程序,客户端程序执行后的画面是这样的:
我们在客户端输入信息:
服务器端接收到信息的画面为:
我们继续在服务器端输入信息:
在客户端会得到回信:
这样,简单的话语交流功能就算是完成了。
欢迎指正我的上一篇博客:函数×指针(C语言)
我的下一篇博客:待续
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)