当前位置:   article > 正文

实现简单的网络通讯(C语言)_c语言在网络通信中的应用程序案例

c语言在网络通信中的应用程序案例

目录

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地址的点分十进制形式

服务器端:

  1. //服务器端
  2. #include<stdio.h>
  3. #include<winsock.h>
  4. int main()
  5. {
  6. char Sendbuf[100];
  7. char Receivebuf[100];
  8. int SendLen;
  9. int ReceiveLen;
  10. int Length;
  11. SOCKET socket_server;
  12. SOCKET socket_receive;
  13. SOCKADDR_IN Server_add;
  14. SOCKADDR_IN Client_add;
  15. WORD wVersionRequested;
  16. WSADATA wsaData;
  17. int error;
  18. wVersionRequested = MAKEWORD(2, 2);
  19. error = WSAStartup(wVersionRequested, &wsaData);
  20. if (error != 0)
  21. {
  22. printf("加载套接字失败!");
  23. return 0;
  24. }
  25. if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)
  26. {
  27. WSACleanup();
  28. return 0;
  29. }
  30. Server_add.sin_family = AF_INET;
  31. Server_add.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
  32. Server_add.sin_port = htons(5000);
  33. socket_server = socket(AF_INET, SOCK_STREAM, 0);
  34. if (bind(socket_server, (SOCKADDR*)&Server_add, sizeof(SOCKADDR)) == SOCKET_ERROR)
  35. {
  36. printf("绑定失败\n");
  37. }
  38. if (listen(socket_server, 5) < 0)
  39. {
  40. printf("监听失败\n");
  41. }
  42. Length = sizeof(SOCKADDR);
  43. socket_receive = accept(socket_server, (SOCKADDR*)&Client_add, &Length);
  44. if (socket_receive == SOCKET_ERROR)
  45. {
  46. printf("接受连接失败");
  47. }
  48. while (1)
  49. {
  50. ReceiveLen = recv(socket_receive, Receivebuf, 100, 0);
  51. if (ReceiveLen < 0)
  52. {
  53. printf("接收失败\n");
  54. printf("程序退出\n");
  55. break;
  56. }
  57. else
  58. {
  59. printf("client says: %s\n", Receivebuf);
  60. }
  61. printf("please enter message:");
  62. scanf("%s", Sendbuf);
  63. SendLen = send(socket_receive, Sendbuf, 100, 0);
  64. if (SendLen < 0)
  65. {
  66. printf("发送失败\n");
  67. }
  68. }
  69. closesocket(socket_receive);
  70. closesocket(socket_server);
  71. WSACleanup();
  72. return 0;
  73. }

 客户端:

  1. //客户端
  2. #include<stdio.h>
  3. #include<winsock.h>
  4. int main()
  5. {
  6. char Sendbuf[100];
  7. char Receivebuf[100];
  8. int SendLen;
  9. int ReceiveLen;
  10. SOCKET socket_send;
  11. SOCKADDR_IN Server_add;
  12. WORD wVersionRequested;
  13. WSADATA wsaData;
  14. int error;
  15. wVersionRequested = MAKEWORD(2, 2);
  16. error = WSAStartup(wVersionRequested, &wsaData);
  17. if (error != 0)
  18. {
  19. printf("加载套接字失败!");
  20. return 0;
  21. }
  22. if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)
  23. {
  24. WSACleanup();
  25. return 0;
  26. }
  27. Server_add.sin_family = AF_INET;
  28. Server_add.sin_addr.S_un.S_addr = inet_addr("192.122.0.104");
  29. //各位博友注意:192.122.0.104 只是一个博主随便写的 IP地址,此处的IP地址各位博友
  30. //可以自己通过上面的方法得到自己PC机的IP地址,通过这个,各位博友能够实现自己同时
  31. //是客户端和服务器端。
  32. Server_add.sin_port = htons(5000);
  33. socket_send = socket(AF_INET, SOCK_STREAM, 0);
  34. if (connect(socket_send, (SOCKADDR*)&Server_add, sizeof(SOCKADDR)) == SOCKET_ERROR)
  35. {
  36. printf("连接失败\n");
  37. }
  38. while (1)
  39. {
  40. printf("please enter message:");
  41. scanf("%s", Sendbuf);
  42. SendLen = send(socket_send, Sendbuf, 100, 0);
  43. if (SendLen < 0)
  44. {
  45. printf("发送失败\n");
  46. }
  47. ReceiveLen = recv(socket_send, Receivebuf, 100, 0);
  48. if (ReceiveLen < 0)
  49. {
  50. printf("接受失败\n");
  51. printf("程序退出\n");
  52. break;
  53. }
  54. else
  55. {
  56. printf("Server says: %s\n", Receivebuf);
  57. }
  58. }
  59. closesocket(socket_send);
  60. WSACleanup();
  61. return 0;
  62. }

注:以上代码摘自明日科技著《C语言从入门到精通》

提示:

        我们的客户端是要用到 IP地址的,至于在哪里要用到,在客户端的代码中已有注释。以上的代码需各位博友建在两个项目里需要开两个执行界面,否则会引起冲突,切记切记。另外,还需各位博友自己在两个项目的属性一栏中有所操作才能使用,步骤如下:

点击后出现一个窗口,点击链接器一栏旁边的三角形,再点击下属项输入,之后再点击页面中的附加依赖项一栏,点击右边的小箭头,然后点击编辑,大概图样如下:

之后出现界面:

记得输入 "ws2_32.lib" ,点击确定,就大功告成了。执行程序时,先执行服务器端,再执行客户端。

        如果有的博友发现电脑仍然出现运行不了,建议先确认 IP地址 是自己的电脑的,并且以点分十进制形式正确输入;如果这没问题,建议看一下编译器类型,博主用的是VS2017, VS系列估计没问题,其它的如 Dev-C++ 应该也没问题;如果仍然不行,直接在网上搜索下载 ws2_32.lib 这个动态库文件。

放几张成功运行程序后的图片:

 

在未执行客户端程序之前,服务器端程序执行后的控制台画面如上是空白的,接下来启动客户端程序,客户端程序执行后的画面是这样的: 

我们在客户端输入信息:

服务器端接收到信息的画面为:

我们继续在服务器端输入信息:

在客户端会得到回信:

这样,简单的话语交流功能就算是完成了。


欢迎指正我的上一篇博客:函数×指针(C语言)

我的下一篇博客:链表的实现(C语言)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/144029
推荐阅读
相关标签
  

闽ICP备14008679号