VC Socket网络通信

本文详细介绍了TCP/IP协议的基本概念及Socket编程原理。包括通信原理、分层结构、常见协议如TCP与UDP的区别,以及如何使用Socket进行网络编程的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1. 与对方通信,第一你必须知道与谁通信,即对方的名字,对于计算机来说就是主机名或IP地址;第二双方必须遵守约定的规则,不能一个讲英语,一个讲汉语,即通信协议必须遵守,TCP/IP,多个应用程序,每个均有一个端口号IP地址相当于一个公司的总机号码,端口号相当于分机号码。

2. 分层,物理层,数据链路层,网络层,传输层,应用层,,,

3. 应用层协议:Telnet,FTP,HTTP,DNS,SMTP. 传输层:TCP/UDP;物理层:IPICMP

4. TCP 面向连接的可靠地传输协议;三次握手;数据确认和数据重传机制。打电话,连接建立。应用在数据完整性较高场合。

UDP:无连接的不可靠的通讯协议。寄信。实时性高!!!

5. 数据打包,封装,到达传输层加上TCP协议头,到达网络层加上IP协议头。

如寄信,一层加上一个信封,到达后一层一层拆封。

6. TCP/IP 模型:应用层,传输层,网络层,网络接口层。

端口是一种抽象的软件结构(包括一些数据结构和IO缓冲区)。0-65535>1024

7. 流式套接字:基于可靠地TCP协议;数据报式套接字:基于UDP协议。

8. TCP 服务端程序流程:

创建套接字;将套接字绑定到一个本地地址和端口上(bind);将套接字设为监听模式。准备接收客户端请求(Listen;等待请求到来,当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept);用返回的套接字和客户端进行通信(send/recv;返回,等待另一客户请求。

9.  TCP客户端程序流程:

创建套接字;向服务器发出连接请求(connect);和服务器进行通信(send/recv);关闭套接字。

当调用accept函数后,服务端等待客户端connect。客户端并不需要bind函数。

UDP服务器:创建套接字;绑定IP和端口bind,等待接收数据recvfrom,关闭套接字;

UDP客户端:创建套接字,向服务器发送数据sendto,关闭套接字。

10. //1.加载套接字库

WSADATA wsaData;

WORD version = MAKEWORD(2, 2);//2.2

int ret = ::WSAStartup(version, &wsaData);

if(ret != 0){

MessageBox("Socket初始化失败!","九洲迪飞");

return;

}

//2. 创建套接字 

SOCKET m_hSocket = ::socket(AF_INET, SOCK_STREAM,0);

::WSAAsyncSelect(m_hSocket,this->m_hWnd,WM_SOCKET,FD_READ|FD_CONNECT);//将套接字设为异步模式 

最后释放资源:

if (WSACleanup() != 0){

TRACE("UnInitilize Error:%d\n"WSAGetLastError());

}

11. Just Do It!!!



Socket相当于进行网络通信两端的插座,只要对方的Socket和自己的Socket有通信联接,双方就可以发送和接收数据了。其定义类似于文件句柄的定义。 
原始套接字保存了数据包中的完整IP头,前面两种套接字只能收到用户数据。因此可以通过原始套接字对数据进行分析。 


旧的网络地址结构的定义 in_addr 
新的网络地址结构的定义: #define INADDR_LOOPBACK 0x7f000001
套接字的使用步骤 
1、启动Winsock WSAStartup
2、创建套接字:(服务器端和客户端) 
m_hSocket = ::socket(AF_INET, SOCK_STREAM,0);
3、套接字的绑定:将本地地址绑定到所创建的套接字上。(服务器端和客户端) bind 
4、 套接字的监听:(服务器端) listen
5、套接字等待连接::(服务器端) accept
6、套接字的连结:将两个套接字连结起来准备通信。(客户端) connect
7、套接字发送数据:(服务器端和客户端) send
8、 套接字的数据接收:(客户端) recv
9、中断套接字连接:通知服务器端或客户端停止接收和发送数据。(服务器端和客户端)shutdown 
10、 关闭套接字:释放所占有的资源。(服务器端和客户端) closesocket


WSAGetLastError,
阻塞模式:执行I/O操作完成前会一直进行等待,不会将控制权交给程序。套接字 默认为阻塞模式。可以通过多线程技术进行处理。 
非阻塞模式:执行I/O操作时,Winsock函数会返回并交出控制权。这种模式使用起来比较复杂,因为函数在没有运行完成就进行返回,
会不断地返回 WSAEWOULDBLOCK错误。但功能强大。 
为了解决这个问题,提出了进行I/O操作的一些I/O模型,下面介绍最常见的三种: 


2、select模型: 3、WSAAsynSelect模型: 4、WSAEventSelect模型 

光 盘 说 明 为了方便读者学习,本书附带了一张光盘,下面对光盘内容及使用方法进行简要的介绍。 1.光盘的运行环境 硬件环境:CPU的主频在200MHz以上、内存在64MB以上。 软件平台:操作系统为Windows 98/Me/NT/2000/XP(推荐使用Windows 2000/XP),调试环境为Visual C++ 6.0及其以上版本(如果不做说明,则默认为Visual C++ 6.0)。 2.光盘的使用方法及注意事项 将本书的源代码拷入硬盘中,用Visual C++打开项目文件,即可编译运行。 3.光盘的主要内容 光盘中存放的是书中涉及的所有实例的源代码和经过编译后的应用程序。所有程序均经过测试,仅供读者学习时使用,不能用作其他商业用途。如果使用时遇到任何问题,请发Email至Fourwei@zj.com,我们将提供全面的解答。 4.光盘目录 (1)基本网络编程实例 Winsock实现网络聊天室【\chap1\ChatRoom(Winsock)】 CSocket实现聊天室【\chap1\ChatRoom(Csocket)】 (2)本地计算机网络编程实例 获取计算机的名称和IP地址【\chap2\Local】 获取计算机的子网掩码【\chap2\ Local】 获取计算机的DNS设置【\chap2\ Local】 获取计算机的网卡地址【\chap2\ Local】 获取计算机安装的协议【\chap2\ Local】 获取计算机提供的服务【\chap2\ Local】 获取计算机的所有网络资源【\chap2\ Local】 修改本地计算机的所有网络设置【\chap2\ Local】 获取计算机TCP/IP协议的所有信息【\chap2\ Local】 (3)局域网网络通信编程实例 获取网上邻居【\chap3\Neighbor】 lIP地址和计算机名之间的转换【\chap3\Neighbor】 l映射网络驱动器【\chap3\Neighbor】 l消息发送程序Net Send【\chap3\Neighbor】 l获取局域网内其他计算机的信息【\chap3\ NeighborInfo】 (4)IE编程实例 简单的浏览器的实现【\chap4\MyBrowser】 删除IE相关历史记录【\chap4\DelHistory】 将应用程序加入到IE工具栏【\chap4\AddToToolBar】 超级链接的实现【\chap4\HyperLink】 禁止IE的弹出窗口【\chap4\StopPopup】 禁止浏览某些网站【\chap4\StopTravel】 IE收藏夹【\chap4\ MyBrowser】 创建桌面快捷方式和活动桌面【\chap4\ShortCut】 (5)基本网络编程实例 点对点文件传输【\chap5\Transfer】 大型文件传输【\chap5\Transfer】 端口扫描程序【\chap5\ MyPortScanner】 Finger编程【\chap5\MyFinger】 Sniff编程【\chap5\MySniff】 Internet文件下载【\chap5\ InternetDownload】 (6)网络通信协议编程 FTP协议【\chap6\FTP】 Email协议【\chap6\Email】 ICMP协议【\chap6\ICMP】 RAS协议【\chap6\RAS】 TAPI协议【\chap6\TAPI】 Telnet协议【\chap6\Telnet】 HTTP协议 【\chap6\HTTP】 (7)Modem /串口通信编程 Modem编程【\chap7\Modem】 MSCOMM控件编程【\chap7\MSCOMM】 串口通信API编程【\chap7\MySerialCom】 (8)代理服务器编程实例 Socks 5协议编程【\chap8\Socks5】 HTTP代理服务器【\chap8\HTTP代理服务】 (9)高级网络通信编程实例 串口通信编程实例【\chap9\SerialPort】 网络流量监控【\chap9\NetTraffic】 网站下载【\chap9\ Snag】 网络五子棋系统【\chap9\FiveChess】 语音聊天【\chap9\ ChatRoom】 远程监控【\chap9\RemoteControl】 赠送实例 类似网络蚂蚁的断点续传程序【\Appendix\NetAnts】 网络多播程序【\Appendix\BroadCast】 界面美观的文字聊天程序【\Appendix\Chat】 语音电话【\Appendix\PhoneCall】
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值