我们经常使用微信、QQ等聊天工具,那我们能不能也写一个可以聊天的程序呢?
当然可以!
今天我们就用C++来写一个可以聊天的程序。
一、什么是socket?
socket顾名思义就是套接字的意思,用于描述地址和端口,是一个通信链的句柄。应用程序通过socket向网络发出请求或者回应。
socket编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW),前两者较常用。基于TCP的socket编程是流式套接字。
二、TCP/IP协议
要理解socket必须的得理解tcp/ip,它们之间好比送信的线路和驿站的作用,比如要建议送信驿站,必须得了解送信的各个细节。
TCP/IP协议不同于iso的7个分层,它是根据这7个分层,将其重新划分,好比打扫卫生,本来有扫帚,垃圾斗,抹布,涂料,盆栽等就好比OSI的标准几个分层,tcp/ip根据用途和功能,将扫帚,垃圾斗放到粗略整理层,抹布涂料放到中度整理层,盆栽放到最终效果层。这里TCP/IP也对OSI的网络模型层进行了划分:大致如下:
TCP/IP协议参考模型把所有的TCP/IP系列协议归类到四个抽象层中
应用层:TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等
传输层:TCP,UDP
网络层:IP,ICMP,OSPF,EIGRP,IGMP
数据链路层:SLIP,CSLIP,PPP,MTU
每一抽象层建立在低一层提供的服务上,并且为高一层提供服务,看起来大概是这样子的
(以上来自(2条消息) Socket编程(简单(C++)实现TCP通信)_一包辣条包邮!的博客-CSDN博客_c++ socket编程)
接下来是实现:
#include<winsock2.h>
#pragma comment(lib,"ws2_32.lib")
首先加入以上的代码。接下来我会把会用到的函数写下来。
WSAStartup()
初始化
定义
WINSOCK_API_LINKAGE _Must_inspect_result_ int WSAAPI
WSAS