服务器端程序:

[cpp] view plaincopy
  1. // Server.cpp : Defines the entry point for the console application.
  2. //
  3. #include "winsock2.h"
  4. #pragma comment(lib, "ws2_32.lib")
  5. #include <iostream>
  6. using namespace std;
  7. int main(int argc, char* argv[])
  8. {
  9. const int BUF_SIZE = 64;
  10. WSADATA         wsd;            //WSADATA变量
  11. SOCKET          sServer;        //服务器套接字
  12. SOCKET          sClient;        //客户端套接字
  13. SOCKADDR_IN     addrServ;;      //服务器地址
  14. char            buf[BUF_SIZE];  //接收数据缓冲区
  15. char            sendBuf[BUF_SIZE];//返回给客户端得数据
  16. int             retVal;         //返回值
  17. //初始化套结字动态库
  18. if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)
  19. {
  20. cout << "WSAStartup failed!" << endl;
  21. return 1;
  22. }
  23. //创建套接字
  24. sServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  25. if(INVALID_SOCKET == sServer)
  26. {
  27. cout << "socket failed!" << endl;
  28. WSACleanup();//释放套接字资源;
  29. return  -1;
  30. }
  31. //服务器套接字地址
  32. addrServ.sin_family = AF_INET;
  33. addrServ.sin_port = htons(4999);
  34. addrServ.sin_addr.s_addr = INADDR_ANY;
  35. //绑定套接字
  36. retVal = bind(sServer, (LPSOCKADDR)&addrServ, sizeof(SOCKADDR_IN));
  37. if(SOCKET_ERROR == retVal)
  38. {
  39. cout << "bind failed!" << endl;
  40. closesocket(sServer);   //关闭套接字
  41. WSACleanup();           //释放套接字资源;
  42. return -1;
  43. }
  44. //开始监听
  45. retVal = listen(sServer, 1);
  46. if(SOCKET_ERROR == retVal)
  47. {
  48. cout << "listen failed!" << endl;
  49. closesocket(sServer);   //关闭套接字
  50. WSACleanup();           //释放套接字资源;
  51. return -1;
  52. }
  53. //接受客户端请求
  54. sockaddr_in addrClient;
  55. int addrClientlen = sizeof(addrClient);
  56. sClient = accept(sServer,(sockaddr FAR*)&addrClient, &addrClientlen);
  57. if(INVALID_SOCKET == sClient)
  58. {
  59. cout << "accept failed!" << endl;
  60. closesocket(sServer);   //关闭套接字
  61. WSACleanup();           //释放套接字资源;
  62. return -1;
  63. }
  64. while(true)
  65. {
  66. //接收客户端数据
  67. ZeroMemory(buf, BUF_SIZE);
  68. retVal = recv(sClient, buf, BUF_SIZE, 0);
  69. if (SOCKET_ERROR == retVal)
  70. {
  71. cout << "recv failed!" << endl;
  72. closesocket(sServer);   //关闭套接字
  73. closesocket(sClient);   //关闭套接字
  74. WSACleanup();           //释放套接字资源;
  75. return -1;
  76. }
  77. if(buf[0] == '0')
  78. break;
  79. cout << "客户端发送的数据: " << buf <<endl;
  80. cout << "向客户端发送数据: " ;
  81. cin >> sendBuf;
  82. send(sClient, sendBuf, strlen(sendBuf), 0);
  83. }
  84. //退出
  85. closesocket(sServer);   //关闭套接字
  86. closesocket(sClient);   //关闭套接字
  87. WSACleanup();           //释放套接字资源;
  88. return 0;
  89. }

客户端程序:

[cpp] view plaincopy
  1. #include "winsock2.h"
  2. #include <iostream>
  3. #pragma comment(lib, "ws2_32.lib")
  4. using namespace std;
  5. BOOL RecvLine(SOCKET s, char* buf); //读取一行数据
  6. int main(int argc, char* argv[])
  7. {
  8. const int BUF_SIZE = 64;
  9. WSADATA wsd; //WSADATA变量
  10. SOCKET sHost; //服务器套接字
  11. SOCKADDR_IN servAddr; //服务器地址
  12. char buf[BUF_SIZE]; //接收数据缓冲区
  13. char bufRecv[BUF_SIZE];
  14. int retVal; //返回值
  15. //初始化套结字动态库
  16. if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)
  17. {
  18. cout << "WSAStartup failed!" << endl;
  19. return -1;
  20. }
  21. //创建套接字
  22. sHost = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  23. if(INVALID_SOCKET == sHost)
  24. {
  25. cout << "socket failed!" << endl;
  26. WSACleanup();//释放套接字资源
  27. return  -1;
  28. }
  29. //设置服务器地址
  30. servAddr.sin_family =AF_INET;
  31. servAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
  32. servAddr.sin_port = htons((short)4999);
  33. int nServAddlen  = sizeof(servAddr);
  34. //连接服务器
  35. retVal=connect(sHost,(LPSOCKADDR)&servAddr, sizeof(servAddr));
  36. if(SOCKET_ERROR == retVal)
  37. {
  38. cout << "connect failed!" << endl;
  39. closesocket(sHost); //关闭套接字
  40. WSACleanup(); //释放套接字资源
  41. return -1;
  42. }
  43. while(true)
  44. {
  45. //向服务器发送数据
  46. ZeroMemory(buf, BUF_SIZE);
  47. cout << " 向服务器发送数据:  ";
  48. cin >> buf;
  49. retVal = send(sHost, buf, strlen(buf), 0);
  50. if (SOCKET_ERROR == retVal)
  51. {
  52. cout << "send failed!" << endl;
  53. closesocket(sHost); //关闭套接字
  54. WSACleanup(); //释放套接字资源
  55. return -1;
  56. }
  57. //RecvLine(sHost, bufRecv);
  58. ZeroMemory(bufRecv, BUF_SIZE);
  59. recv(sHost, bufRecv,BUF_SIZE , 0); // 接收服务器端的数据, 只接收5个字符
  60. cout << endl <<"从服务器接收数据:"<< bufRecv;
  61. cout<<"\n";
  62. }
  63. //退出
  64. closesocket(sHost); //关闭套接字
  65. WSACleanup(); //释放套接字资源
  66. return 0;
  67. }

C++ socket编程 实现服务端与客户端的通讯相关推荐

  1. OSI七层、TCP/IP五层、UDP、TCP的socket编程(服务端及客户端)、字节序转换、多进程以及多线程服务端的实现

    1.网络以覆盖范围划分:局域网/城域网/广域网   互联网/因特网   以太网/令牌环网--组网方式 2.在网络中必须能够为一表示每一台主机,才能实现点到点的精确通信            IP地址: ...

  2. Qt:Qt实现Winsock网络编程—TCP服务端和客户端通信(多线程)

    Qt实现Winsock网络编程-TCP服务端和客户端通信(多线程) 前言 感觉Winsock网络编程的api其实和Linux下网络编程的api非常像,其实和其他编程语言的网络编程都差不太多.博主用Qt ...

  3. Linux C++服务器项目——网络编程1 (socket通信,服务端,客户端)

    牛客 C++高并发服务器开发 参考笔记 1.MAC地址 2 IP地址 2.1 简介 2.2 IP地址编址方式 2.3 子网掩码 3 端口 3.1 简介 3.2 端口类型 4 网络模型 4.1 OSI七 ...

  4. python实现socket编程,服务端开启多线程(和多个客户端聊天)

    首先运行服务端,待服务端运行起来之后,最后开始运行客户端进行对话,可以运行多个客户端和服务端对话,注意这个开启的客户端的顺序和服务端的聊天顺序(其实就是阻塞,待上一个客户端和服务端的一段对话结束之后, ...

  5. MFC:Socket编程—TCP服务端和多个客户端通信

    前言 MFC是微软基础类库,于 C++ 对于 C语言来说,MFC对于window API ,MFC 就相当于C++,window API 相当于C.MFC 封装了 window API 使用起来更加的 ...

  6. java贪吃蛇客户端服务器_java Socket套接字TCP编程开发服务端和客户端之间的通信 - 贪吃蛇学院-专业IT技术平台...

    超级简单,没有太多实质内容的Socket服务端,客户端小程序 先运行server 再运行client OK 服务端代码如下: public class Server { public static v ...

  7. Socket代码实现服务端 和 客户端之间通信

    服务端代码 // Socket_connection.cpp : 此文件包含 "main" 函数.程序执行将在此处开始并结束. // #ifndef UNICODE #define ...

  8. 【.Net MF网络开发板研究-04】Socket编程之服务端

    前几篇文章介绍了Http相关的应用,其实从技术角度而言,应该先介绍Socket编程,然后再介绍Http,毕竟Http是用Socket相关函数编程实现的. .NET Micro Framework的So ...

  9. C# Socket案例(服务端与客户端)

    本文链接:https://blog.csdn.net/qq_42203978/article/details/80520299 服务端完整代码 using System; using System.N ...

最新文章

  1. Linux下配置SNMP
  2. 2020 Java 面试高薪攻略.pdf
  3. 【VM单机模拟系列】VMware P2V简单实现
  4. SQL Server 2008 R2 开启数据库远程连接
  5. PaddleOCR——运行错误【Please compile with gpu to EnableGpu()】解决方案
  6. [html] 404页面有什么作用?
  7. Java 修饰符详解:吐血整理,带你从底层语法和开发案例疏通这 11 种常见修饰符
  8. 美的物联平台的云上实践与应用
  9. Qemu Tracing
  10. 想安装一套监控,流程是什么?费用多少?
  11. Logistic逻辑回归总结
  12. excel工具箱_Excel工具箱15.54安装教程
  13. mysql读写分离(PHP类)
  14. 舞伴问题(数据结构队列,c语言版)
  15. BGP Aggregation – Suppress Map
  16. 添加友情链接获取CF币
  17. java数据之头尾链表
  18. 【LVGL应用开发--基于STM32】第1章 初识LVGL
  19. 如何在AD中批量创建域用户
  20. csgo 放置机器人_一键跑图!极为方便的CSGO跑图工具(附2020年5月28日更新)

热门文章

  1. php 钩子,php钩子原理是什么
  2. oracle数据库的select,Oracle数据库--基本的select语句
  3. python生成元组_python 列表生成、元组、字典
  4. 天津大学计算机图形学_考研大数据|2020天津大学计算机类分数统计
  5. oracle11g的体系结构有几种,Oracle11g 体系结构
  6. 这名程序员28岁就退休了。。。
  7. 计算机工具软件未来的发展,2017年我国PC及工具软件的发展概况
  8. java中如何设置浏览器宽度_[Java教程]关于JS中获取浏览器高度和宽度值的多种方法(多浏览器)_星空网...
  9. 清分日期是当天还是第二天_年底了,您的驾驶证是该清分了吗?
  10. 20220129--CTF WEB方向刷题-- WP--非常简单的webshell题