C++利用socket技术建立网络连接

本文介绍了socket技术在计算机通信中的作用,详细讲解了网络中进程如何通过TCP/IP协议进行通信,以及在C++中使用socket技术实现TCP协议服务端和客户端的详细步骤。
摘要由CSDN通过智能技术生成

1. socket技术简介

    计算机通信领域,socket被翻译为“套接字”,它是计算机之间进行通信的一种约定,或一种方式。通过socket这种约定,计算机之间可以建立连接,并传输数据。
    socket技术起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open ->读写write/read->关闭close”模式来操作。

2. 网络中进程如何通信

我理解的通讯是要解决2个问题:

  1. 我要怎么找到上家地址(找到接收信息的电脑);
  2. 通过地址我怎么找到上家派来和我接头的人(接收信息的电脑中具体哪一个程序是用来。)

    所有的通讯都要确定以上两个问题,否则会出现要么不知道找哪一台电脑,要么找到电脑了也不知道哪个程序来响应传输过来的数据。
    所以计算机建立了一套规则来确定,这个规则就是网络协议。当然规则有很多种,其中TCP/IP协议簇就是一种现在被广泛应用的协议,而所谓的socket技术就是将这种协议封装起来,方便大家调用。
    TCP/IP协议簇首先利用网络层的“IP地址”确定网络中的主机,再依靠传输层的“协议+端口”标识主机中的应用程序,解决上面的两个问题。
    上面的所说的“协议+端口”中的协议有两种,一种是TCP协议,另一种是UDP协议,这两种协议针对的需求不同,TCP协议是一种可靠的网络传输协议,它需要经过3次握手和4次挥手的方式保证传输的数据被正确的接收到,但是由于需要进行多次确认,牺牲了一定的网络资源,导致传输效率下降(当然也不是慢的跟狗一样,这个慢只是相对于UDP)。而UDP协议则不保证数据传输被接收到,发送方的数据有可能会在传输中丢失,但是这种方式保证了传输速度,在一些要求速度而对数据完整性要求不高的场景(如视频播放,掉几个帧不妨碍观看效果)中得到广泛应用。

3. socket技术在C++中的编写方式

在这里插入图片描述
上图描述了套接字技术中基于TCP协议的一种实现方式。它把计算机分为两个实体,一个为服务端,一个为客户端,服务端将程序绑定到电脑的IP地址和端口上,然后客户端通过监听套接字向服务端的地址和端口发送链接请求,握手通过后,双方连接建立完成,此时双方通过传输套接字传输数据,当数据传输结束后,使用close()函数断开链接。
在C++网络编程中,为了引用上面套接字的相关应用,需要引入一些头文件和库文件,并对系统进行初始化,以及释放空间的扫尾工作,这将在后面的代码中有一定的展示。

TCP协议服务端

TCP协议的服务端一般需要6步来实现:

  1. 加载套接字头文件、初始化环境平台
  2. 创建监听套接字
  3. 将监听套接字绑定到IP地址和端口上
  4. 监听端口
  5. 接受客户端请求
  6. 发送、接收消息
  7. 关闭套接字
  8. 清理环境

这里需要注意的是,监听套接字与传输用的套接字不是一个,关闭的时候是关闭监听套接字。
代码实现

#include<WinSock2.h>//套接字头文件
#include<iostream>
using namespace std;

//制定动态度的lib文件
#pragma comment(lib,"ws2_32.lib")//套接字函数库

int main()
{
   
	
	//初始化winsock2.2相关动态库
	WSADATA wd;
	if(WSAStartup(MAKEWORD(2, 2), &wd) != 0)//0表示成功
	{
   
		cout << "WSAStartup error:" << WSAGetLastError();
		return 0;
	}

	//1.创建TCP socket
	SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if (s == INVALID_SOCKET)
	{
   
		cout << "soc
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值