目录

IP地址简介:

服务器端:

客户端:

提示:


IP地址简介:

一台联网设备的 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语言)

实现简单的网络通讯(C语言)相关推荐

  1. java 解析数据包_一种基于Java语言的网络通讯数据包解析方法与流程

    本发明涉及网络通讯领域,特别涉及一种基于Java语言的网络通讯数据包解析方法. 背景技术: 计算机系统和网络的大量普及使用使全球跨入了信息化时代.但是,正由于现代社会中几乎一切都在"计算机化 ...

  2. 易语言php注册,易语言简单ASP网络验证源码 PHP一键搭建网络验证源码

    说明: 易语言简单ASP网络验证源码 ,很不错的易语言源码,适合易语言爱好者学习, (Easy language simple ASP network verification source code ...

  3. 在网络通讯中应用Protobuf

    Protobuf的设计非常适用于在网络通讯中的数据载体,它序列化出来的数据量少再加上以K-V的方式来存储数据,对消息的版本兼容性非常强:还有一个比较大的优点就是有着很多的语言平台支持.下面讲解一下如何 ...

  4. 如何通过序列化在网络间传递对象,网络协议:轻松定义自己的网络通讯协议

    //每次编写设计网络通讯程序时,总面对一个问题,就是要自定义一组应用协议(即通讯协议),然后再写相应的方法来解析协议,并提供相应的接口供上层调用.假如只是简单的文本信息通讯还轻易,但要交换一些控制信息 ...

  5. day06--java高级编程:多线程,枚举类,注解,反射,网络通讯

    1 Day16–多线程01 1.1 程序概念 程序(program):是为完成特定任务.用某种语言编写的一组指令的集合.即指一段静态的代码,静态对象. 1.2 进程 1.2.1 概念 进程(proce ...

  6. 简单局域网网络故障排查和处置

    简单局域网网络故障排查和处置 一.了解基本网络构成 1. IP传输通信图 2.有线网络 (一)物理层面 (1)网线 (2)网线的制作 (3)网卡接口 (4)光纤 (5)光纤接口 (6)收发器 (7)集 ...

  7. 【网络通讯与网络安全】网络通讯中的随机数如果不随机会怎么样?(RT-Thread技术论坛优秀文章)

    文章目录 1 写在前言 2 问题描述 3 场景再现 3.1 复现环境搭建 3.2 复现问题的说明 4 问题分析 4.1 从大到小:理解软件架构 4.2 从小到大:抛开现象看本质 4.3 要放大招:三板 ...

  8. 网络通讯面试题及答案

    文章目录 1. BIO 与 NIO 的区别 2. select 与 poll 的区别 3.请概述 OSI 网络模型 4. TCP 和 UDP 的区别 5.请概述 TCP 的三次握手四次挥手机制 6.为 ...

  9. 【网络通讯开发系列】如何抓取终端设备的TLS报文(一)

    文章目录 1 写在前面 2 需求分析 3 几个方法 4 原理分析 5 方法实践 5.1 工具准备 5.2 详细步骤 6 经验总结 7 参考链接 8 更多分享 作者:架构师李肯 一个专注于嵌入式IoT领 ...

最新文章

  1. AD 域服务简介(二)- Java 获取 AD 域用户
  2. [bzoj2400]Optimal Marks
  3. GDCM:获取SubSequence数据的测试程序
  4. HTML5新增标签的汇总与详解
  5. 数字图像处理--几种图像均值滤波的java实现
  6. canvas html 动态,canvas.html
  7. .NET 6新特性试用 | 无需配置开发人员异常页
  8. envi最大似然分类_闲谈最大后验概率估计(MAP estimate)amp;极大似然估计(MLE)和机器学习中的误差分类...
  9. 不具有继承关系的Delegate如何进行类型转换?
  10. java 全半角转换_Java 全半角转换
  11. 课外知识----浏览器存储技术
  12. 关于发邮件报错535 Error:authentication failed解决方法
  13. linux定时器与线程,Linux下的多线程定时器实现
  14. php eclipse 版本_PHPEclipse官方下载
  15. 接入华为webpush webpush总结
  16. 访问控制列表——ACL
  17. 支持网络和局域网共享文件的windows pe
  18. 用html写京东网页,实现部分功能
  19. Android之运用百度地图检索地点
  20. OpenCV C++ imread填写路径下有图片却读不出 求助!!!!!!

热门文章

  1. python实现数据降维
  2. 完爆 90% 的数据库性能毛病!
  3. python itertools详解及使用示例
  4. Java Web 学习路线(2018)
  5. CAN总线的终端电阻一定要120Ω吗?
  6. 23 | 知其然知其所以然:聊聊API自动化测试框架的前世今生
  7. categorical_crossentropy与sparse_categorical_crossentropy到底有什么区别呢?
  8. Web网站克隆侦察工具HTTrack
  9. Java春招面试题之Java语言基础类
  10. 字符串(字符串匹配)