C++ socket编程 实现服务端与客户端的通讯
服务器端程序:
- // Server.cpp : Defines the entry point for the console application.
- //
- #include "winsock2.h"
- #pragma comment(lib, "ws2_32.lib")
- #include <iostream>
- using namespace std;
- int main(int argc, char* argv[])
- {
- const int BUF_SIZE = 64;
- WSADATA wsd; //WSADATA变量
- SOCKET sServer; //服务器套接字
- SOCKET sClient; //客户端套接字
- SOCKADDR_IN addrServ;; //服务器地址
- char buf[BUF_SIZE]; //接收数据缓冲区
- char sendBuf[BUF_SIZE];//返回给客户端得数据
- int retVal; //返回值
- //初始化套结字动态库
- if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)
- {
- cout << "WSAStartup failed!" << endl;
- return 1;
- }
- //创建套接字
- sServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
- if(INVALID_SOCKET == sServer)
- {
- cout << "socket failed!" << endl;
- WSACleanup();//释放套接字资源;
- return -1;
- }
- //服务器套接字地址
- addrServ.sin_family = AF_INET;
- addrServ.sin_port = htons(4999);
- addrServ.sin_addr.s_addr = INADDR_ANY;
- //绑定套接字
- retVal = bind(sServer, (LPSOCKADDR)&addrServ, sizeof(SOCKADDR_IN));
- if(SOCKET_ERROR == retVal)
- {
- cout << "bind failed!" << endl;
- closesocket(sServer); //关闭套接字
- WSACleanup(); //释放套接字资源;
- return -1;
- }
- //开始监听
- retVal = listen(sServer, 1);
- if(SOCKET_ERROR == retVal)
- {
- cout << "listen failed!" << endl;
- closesocket(sServer); //关闭套接字
- WSACleanup(); //释放套接字资源;
- return -1;
- }
- //接受客户端请求
- sockaddr_in addrClient;
- int addrClientlen = sizeof(addrClient);
- sClient = accept(sServer,(sockaddr FAR*)&addrClient, &addrClientlen);
- if(INVALID_SOCKET == sClient)
- {
- cout << "accept failed!" << endl;
- closesocket(sServer); //关闭套接字
- WSACleanup(); //释放套接字资源;
- return -1;
- }
- while(true)
- {
- //接收客户端数据
- ZeroMemory(buf, BUF_SIZE);
- retVal = recv(sClient, buf, BUF_SIZE, 0);
- if (SOCKET_ERROR == retVal)
- {
- cout << "recv failed!" << endl;
- closesocket(sServer); //关闭套接字
- closesocket(sClient); //关闭套接字
- WSACleanup(); //释放套接字资源;
- return -1;
- }
- if(buf[0] == '0')
- break;
- cout << "客户端发送的数据: " << buf <<endl;
- cout << "向客户端发送数据: " ;
- cin >> sendBuf;
- send(sClient, sendBuf, strlen(sendBuf), 0);
- }
- //退出
- closesocket(sServer); //关闭套接字
- closesocket(sClient); //关闭套接字
- WSACleanup(); //释放套接字资源;
- return 0;
- }
客户端程序:
- #include "winsock2.h"
- #include <iostream>
- #pragma comment(lib, "ws2_32.lib")
- using namespace std;
- BOOL RecvLine(SOCKET s, char* buf); //读取一行数据
- int main(int argc, char* argv[])
- {
- const int BUF_SIZE = 64;
- WSADATA wsd; //WSADATA变量
- SOCKET sHost; //服务器套接字
- SOCKADDR_IN servAddr; //服务器地址
- char buf[BUF_SIZE]; //接收数据缓冲区
- char bufRecv[BUF_SIZE];
- int retVal; //返回值
- //初始化套结字动态库
- if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)
- {
- cout << "WSAStartup failed!" << endl;
- return -1;
- }
- //创建套接字
- sHost = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
- if(INVALID_SOCKET == sHost)
- {
- cout << "socket failed!" << endl;
- WSACleanup();//释放套接字资源
- return -1;
- }
- //设置服务器地址
- servAddr.sin_family =AF_INET;
- servAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
- servAddr.sin_port = htons((short)4999);
- int nServAddlen = sizeof(servAddr);
- //连接服务器
- retVal=connect(sHost,(LPSOCKADDR)&servAddr, sizeof(servAddr));
- if(SOCKET_ERROR == retVal)
- {
- cout << "connect failed!" << endl;
- closesocket(sHost); //关闭套接字
- WSACleanup(); //释放套接字资源
- return -1;
- }
- while(true)
- {
- //向服务器发送数据
- ZeroMemory(buf, BUF_SIZE);
- cout << " 向服务器发送数据: ";
- cin >> buf;
- retVal = send(sHost, buf, strlen(buf), 0);
- if (SOCKET_ERROR == retVal)
- {
- cout << "send failed!" << endl;
- closesocket(sHost); //关闭套接字
- WSACleanup(); //释放套接字资源
- return -1;
- }
- //RecvLine(sHost, bufRecv);
- ZeroMemory(bufRecv, BUF_SIZE);
- recv(sHost, bufRecv,BUF_SIZE , 0); // 接收服务器端的数据, 只接收5个字符
- cout << endl <<"从服务器接收数据:"<< bufRecv;
- cout<<"\n";
- }
- //退出
- closesocket(sHost); //关闭套接字
- WSACleanup(); //释放套接字资源
- return 0;
- }
C++ socket编程 实现服务端与客户端的通讯相关推荐
- OSI七层、TCP/IP五层、UDP、TCP的socket编程(服务端及客户端)、字节序转换、多进程以及多线程服务端的实现
1.网络以覆盖范围划分:局域网/城域网/广域网 互联网/因特网 以太网/令牌环网--组网方式 2.在网络中必须能够为一表示每一台主机,才能实现点到点的精确通信 IP地址: ...
- Qt:Qt实现Winsock网络编程—TCP服务端和客户端通信(多线程)
Qt实现Winsock网络编程-TCP服务端和客户端通信(多线程) 前言 感觉Winsock网络编程的api其实和Linux下网络编程的api非常像,其实和其他编程语言的网络编程都差不太多.博主用Qt ...
- 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七 ...
- python实现socket编程,服务端开启多线程(和多个客户端聊天)
首先运行服务端,待服务端运行起来之后,最后开始运行客户端进行对话,可以运行多个客户端和服务端对话,注意这个开启的客户端的顺序和服务端的聊天顺序(其实就是阻塞,待上一个客户端和服务端的一段对话结束之后, ...
- MFC:Socket编程—TCP服务端和多个客户端通信
前言 MFC是微软基础类库,于 C++ 对于 C语言来说,MFC对于window API ,MFC 就相当于C++,window API 相当于C.MFC 封装了 window API 使用起来更加的 ...
- java贪吃蛇客户端服务器_java Socket套接字TCP编程开发服务端和客户端之间的通信 - 贪吃蛇学院-专业IT技术平台...
超级简单,没有太多实质内容的Socket服务端,客户端小程序 先运行server 再运行client OK 服务端代码如下: public class Server { public static v ...
- Socket代码实现服务端 和 客户端之间通信
服务端代码 // Socket_connection.cpp : 此文件包含 "main" 函数.程序执行将在此处开始并结束. // #ifndef UNICODE #define ...
- 【.Net MF网络开发板研究-04】Socket编程之服务端
前几篇文章介绍了Http相关的应用,其实从技术角度而言,应该先介绍Socket编程,然后再介绍Http,毕竟Http是用Socket相关函数编程实现的. .NET Micro Framework的So ...
- C# Socket案例(服务端与客户端)
本文链接:https://blog.csdn.net/qq_42203978/article/details/80520299 服务端完整代码 using System; using System.N ...
最新文章
- Linux下配置SNMP
- 2020 Java 面试高薪攻略.pdf
- 【VM单机模拟系列】VMware P2V简单实现
- SQL Server 2008 R2 开启数据库远程连接
- PaddleOCR——运行错误【Please compile with gpu to EnableGpu()】解决方案
- [html] 404页面有什么作用?
- Java 修饰符详解:吐血整理,带你从底层语法和开发案例疏通这 11 种常见修饰符
- 美的物联平台的云上实践与应用
- Qemu Tracing
- 想安装一套监控,流程是什么?费用多少?
- Logistic逻辑回归总结
- excel工具箱_Excel工具箱15.54安装教程
- mysql读写分离(PHP类)
- 舞伴问题(数据结构队列,c语言版)
- BGP Aggregation – Suppress Map
- 添加友情链接获取CF币
- java数据之头尾链表
- 【LVGL应用开发--基于STM32】第1章 初识LVGL
- 如何在AD中批量创建域用户
- csgo 放置机器人_一键跑图!极为方便的CSGO跑图工具(附2020年5月28日更新)
热门文章
- php 钩子,php钩子原理是什么
- oracle数据库的select,Oracle数据库--基本的select语句
- python生成元组_python 列表生成、元组、字典
- 天津大学计算机图形学_考研大数据|2020天津大学计算机类分数统计
- oracle11g的体系结构有几种,Oracle11g 体系结构
- 这名程序员28岁就退休了。。。
- 计算机工具软件未来的发展,2017年我国PC及工具软件的发展概况
- java中如何设置浏览器宽度_[Java教程]关于JS中获取浏览器高度和宽度值的多种方法(多浏览器)_星空网...
- 清分日期是当天还是第二天_年底了,您的驾驶证是该清分了吗?
- 20220129--CTF WEB方向刷题-- WP--非常简单的webshell题