C++ socket 通信客户端和服务器端
#include <iostream>
#include <stdio.h>
#include <windows.h> //一定要包含该头文件
#pragma comment(lib, "WS2_32.lib") //windwows下的socket编程函数库
using namespace std;
int main()
{ WSADATA wsaData; WORD sockVersion = MAKEWORD(2, 2); //windows网络编程库的版本号信息SOCKET sock = 0; //TCP通信的socket数据结构 if (WSAStartup(sockVersion, &wsaData) != 0) //WSAStartup函数是在程序中初始化并加载Windows网络{ cout << "initlization failed!" << endl; exit(0); //如果WSAStartup返回值为1的话就表示ws2_32.dll文件有问题,程序退出} sock = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); //在本机上创建一个socket if (sock == INVALID_SOCKET) //判断socket是否创建成功{ cout << "failed socket!" << endl; return 0; //如果创建失败就在程序中返回0结束程序} sockaddr_in sin; //创建一个socket编程类型的网络地址数据结构以便connect函数对本机创建的socket数据//结构进行初始化。sin.sin_family = AF_INET; //设置网络协议族类型sin.sin_port = htons(4567); //设置远程计算机的端口号sin.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//设置远程计算机的IP地址 if (connect(sock, (sockaddr*)&sin, sizeof(sockaddr)) == -1) //初始化socket并连接远程计算机{ cout << "connect failed!" << endl; return 0; //连接失败就返回0到程序} char buffer[256] = "\0"; //声明一个从网络接收数据的缓存区int nRecv = 0; //声明一个从网络接收到的数据字节长度 nRecv = recv(sock, buffer, 256, 0); //recv是一个接收网络的TCP数据包函数,nRecv是从网络接收到数//据的字节长度 if (nRecv > 0) { buffer[nRecv] = '\0'; //如果接收到网络数据包长度大于0的话就在接收到的数据包未尾添加一个字符串//结束符 cout << "reveive data: " << buffer << endl;//按字符串格式输出接收到的数据 } closesocket(sock); //关闭这个TCP网络通信连接WSACleanup(); //释放ws2_32.dll动态库} //服务端: #include <iostream> #include <stdio.h> #include <windows.h> //一定要包含该头文件using namespace std; #pragma comment(lib, "WS2_32.lib") //windwows下的socket编程函数库int main() { WSADATA wsaData; WORD sockVersion = MAKEWORD(2, 2); //windows网络编程库的版本号信息SOCKET sListen = 0; //TCP通信的socket数据结构sockaddr_in sin = {0}; //创建一个socket编程类型的网络地址数据结构这个用于本地sockaddr_in remoteAddr = {0};//创建一个socket编程类型的网络地址数据结构这个用于储存远程主机的//IP地址和端口号 char szText[] = "TCP Server Demo"; int nAddrLen = 0; nAddrLen = sizeof(sockaddr_in); //计算这个sockaddr_in数据结构的大小sin.sin_port = htons(4567); //设置本地(这里指服务端)计算机要打开的端口sin.sin_family = AF_INET; //设置网络通信的网络协议族类型sin.sin_addr.S_un.S_addr = INADDR_ANY; //设置本地计算机的IP地址,一般INADDR_ANY在程序运行时//会自动计算成本地的IP地址的//init wsa if (WSAStartup(sockVersion, &wsaData) != 0)//WSAStartup函数是在程序中初始化并加载Windows网络{ cout << "initlization failed!" << endl; exit(0); //如果WSAStartup返回值为1的话就表示ws2_32.dll文件有问题,程序退出} sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); //在本机上创建一个socket//使用bind函数绑定本机的ip和打开端口到本机创建的socket结构上,并初始化该socket//重点说明一个在服务器上是用bind函数来初始化socket,在客户机上是用connect函数来初始化socket的喔if (bind(sListen, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR) { cout << "bind failed!" << endl; return 0; //如果socket绑定失败返回程序0并退出程序} if (listen(sListen, 2) == SOCKET_ERROR) //listen是用来打开本地计算机的端口,参数2表示客户端同//时连接服务器的数量,这里是说可以同时有2个客户端连接//到本机打开的端口{ cout << "listen failed!" << endl; return 0; //如果打开本地端口失败就返回0并退出程序 } SOCKET sClient = INADDR_ANY; //再服务器上再创建一个socket结构,用来储存与一个客户端进行通信连//接的连接实例 while (true) { //accept函数是用来创建一个TCP通信连接实例的,他使用一个远程计算机的IP地址和本地计算机上创建的一个//socket,这两个信息来创建一个本地计算机到远程计算机的一个TCP通信连接实例的socket,sClient就是当前//程序中的这个连接实例的socket 了。注accept函数也可以直接理解为接受一个客户机的连接请求。 sClient = accept(sListen, (SOCKADDR*)&remoteAddr, &nAddrLen); if (sClient == INVALID_SOCKET) { cout << "accept failed!" << endl; continue; //如果本地计算机(服务器)接受一个客户端连接请求失败就退出监听状态} //send函数是在TCP连接建立之后,就来发送数据的。其中sClient是存放有一个连接实例的socket结构来//的。这个服务器上的send函数的socket参数和客户机上的socket参数是不同的喔,记住这里的socket参数是通过//accept函数创建的喔。不是用connet函数和bind函数创建喔。一定要记住这个sClient是一个关键来的。然后//szText就是我们想要发送的数据了。这里我们向连接到该服务器的客户端发送了一个“TCP Server Demo”的信息。send(sClient, szText, strlen(szText), 0); closesocket(sClient); //关闭这个用accept函数建立socket对象,关闭与remoteAddr连接通信。//remoteAddr这结构理包含了有远程计算机的IP和端口号信息,当客户机//使用connect函数发送一个连接请求时,被accept函数接受并处理后,远//程计算机的IP地址和端口信息就被填到了remoteAddr这个结构中去} closesocket(sListen); //关闭本地计算机(服务器)上的由bind函数创建的socket对象,关闭本机//打开的端口,关闭服务器 WSACleanup(); //释放ws2_32.dll动态库}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
C++ socket 通信客户端和服务器端相关推荐
- 安卓应用开发Socket通信 客户端+服务器端
安卓应用开发Socket通信 客户端+服务器端 1. 添加网络权限 <uses-permission android:name="android.permission.INTERNET ...
- python客户端与服务器端_Python实现的FTP通信客户端与服务器端功能示例
本文实例讲述了Python实现的FTP通信客户端与服务器端功能.分享给大家供大家参考,具体如下: 一 代码 1.服务端代码 import socket import threading import ...
- java socket通信 客户端_JavaのSocket编程之简单客户端与服务器端通信
Socket编程之简单客户端与服务器端通信 socket 通常用来实现客户端和服务端的连接,socket 是Tcp/Ip协议的一个十分流行的编程界面,一个socket 由一个Ip地址和一个端口号唯一确 ...
- Java通过socket实现客户端和服务器端的通信
在学习Java的socket通信时,老师布置的一道作业题,借此机会也对相关的知识进行梳理,题目如下: 编写客户服务器端程序,使用Socket技术实现通信,双方约定通信端口为6789.服务器端功能:当收 ...
- Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
文章目录 设计思路 代码实现 传输结果 设计思路 运行思路如下 由于在做人脸视频检测的项目的时候需要将检测的人脸区域全部保存下来,并发送到服务器端(用虚拟机来代替),来进行人脸对比,整个代码设计思路如 ...
- 关于Socket通信客户端是否需要绑定端口号
参见http://blog.chinaunix.net/uid-23193900-id-3199173.html 无连接的socket的客户端和服务端以及面向连接socket的服务端通过调用bind函 ...
- Java中Socket通信-客户端与服务端相互传输对象数据
场景 Java中Socket通信-服务端和客户端双向传输字符串实现: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1084885 ...
- Java中Socket通信-客户端向服务端发送照片
场景 Java中Socket通信-服务端和客户端双向传输字符串实现: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1084885 ...
- Socket通信客户端报错Connection reset
Socket服务端启动不报错,在启动客户端后控制台出现如下问题 [ Exception in thread "main" java.net.SocketException: Con ...
最新文章
- ssh远程操作服务器
- Android使用smack连接openfire(本地+远程)
- highcharts与ajax的应用
- 驰骋工作流携手山东金义,实施落地上海光大银行
- memcached全面剖析–3.memcached的删除机制和发展方向
- leetcode:Minimum Depth of Binary Tree【Python版】
- .NET平台PE结构分析之Metadata(一)
- SAP Spartacus CmsService.Components数据结构
- 15秋计算机基础作业3,东师15秋《计算机应用基础》在线作业3介绍.doc
- 关于SWT/JFace中其他常用的事件
- 发动机压缩比怎么计算公式_怎么判断发动机有积碳,发动机积碳多的症状有哪些...
- jquery-入门-基本使用-选择器-转移
- 交换两幅图像的幅度谱和相位谱,并重构图像
- 廖雄南昌大学计算机系,南昌市社区老年性痴呆患病率及其影响因素
- HTML5视频放完自动跳转,炫酷html5 网站视频自动跳转代码,零基础秒学
- php怎么写书店系统,基于PHP技术的新华在线购书店系统
- 信度spss怎么做_Spss详细图文教程——问卷信度和效度检验步骤图解
- An invalid domain [.test.com] was specified for this cookie 原因分析
- java实现PC网站实现微信扫码登陆
- 多目标跟踪 TAO 数据集使用方法分享
热门文章
- php think cmf,thinkphp cmf代码
- gin 前端文件打包_远程URL文件批量下载打包的方法
- stm32 火灾自动报警及联动控制源码_中级消防设施操作员关键技能之十四:能测试火灾自动报警系统联动功能...
- android截图canvas为空,html2canvas截图空白问题的解决
- java 日历类_JAVA 的日历类型
- python内核_python内核_python内核语言_python版本内核 - 云+社区 - 腾讯云
- 消息队列服务器 轻量,PHP的轻量消息队列php-resque使用说明
- python导出数据找不到csv_python – 将数据从neo4j导出到csv而不是json
- python设置图片透明度_学习python第40天
- android 支付宝 40247,支付宝 app支付异常摘记 -- ALI40247