SOCKET通信——winsock编程
来源:互联网 发布:北京市政务数据资源网 编辑:程序博客网 时间:2024/06/07 09:14
Winsock是windows系统下利用Socket套接字进行网络编程的相关函数,是Windows下的网络编程接口。
Winsock在常见的Windows平台上有两个主要的版本,即Winsock1和Winsock2。编写与Winsock1兼容的程序你需要引用头文件WINSOCK.H,如果编写使用Winsock2的程序,则需要引用WINSOCK2.H。此外还有一个MSWSOCK.H头文件,它是专门用来支持在Windows平台上高性能网络程序扩展功能的。使用WINSOCK.H头文件时,同时需要库文件WSOCK32.LIB,使用WINSOCK2.H时,则需要WS2_32.LIB,如果使用MSWSOCK.H中的扩展API,则需要MSWSOCK.LIB。正确引用了头文件,并链接了对应的库文件,你就构建起编写WINSOCK网络程序的环境了。
一般来说,比较熟知的网络模型即OSI(Open system Interconnect)模型,它分为七层,即物理层,数据链路层,网络层,传输层,会话层,表示层以及应用层。而真正得到广泛应用的事TCP/IP 模型。在windows系统下,同样采用了TCP/IP模型进行不同主机以及不同网络间的通信。使用Winsock编程,即必须使用TCP/IP等相关协议进行通信。
在Winsock中,提供了TCP/IP协议下使用的套接字地址,即sockaddr_in结构体,在MSDN中查到其结构体的具体定义为:
其中:
- sin_family的值必须指定为AF_INET,代表所属地址家族是TCP/IP地址家族;
- sin_port代表端口号。我们知道,在TCP/IP协议,正是通过IP地址以及端口号实现端与端的通信。在TCP/IP协议中,有65536个端口号,因此指定为无符号short类型;
- in_addr同样是结构体。其结构为:
注:具体的使用方式以及注释都可查阅MSDN;
接下来本文将针对TCP协议具体实现进行简单的介绍。
针对上面的流程图,将对实现过程即相关函数进行介绍:
1、创建套接字:由于采用的是TCP协议,因此必须采用流式套接字,因为TCP协议采取的是字节流的方式进行传输数据的。
其中:
最后一个参数指定为0的原因是因为在af中已经指定地址格式为TCP/IP协议规定的地址格式,因此最后一个参数协议类型指定为0;
2、绑定地址信息
使用函数bind()即可完成地址信息的绑定。这个过程完成的是套接字和地址信息的绑定。
3、作为TCP服务器必须处于监听状态,随时监听客户端的连接请求。这个过程是通过listen()函数实现的。
4、客户端发送连接请求。该函数于bind函数的结构类似。
这里的sockaddr定义的地址指针是服务器的地址指针;
5.服务器接受客户端的连接请求。实现函数为accept(),结构和connect()以及bind()类似,不同的是定义的结构指针应该为客户端的地址指针;
最后将TCP协议的实现代码贴在本文,实现平台是Visual c++6.0中建立控制台应用程序实现。
服务器代码:
客户端代码:
- SOCKET通信——winsock编程
- 网络编程Winsock——socket
- Socket通信——Windows下,使用Winsock,C++
- Windows Socket 网络编程(四) —— Winsock 编程接口
- Socket编程——Socket通信
- winsock.h(Socket编程)
- java socket编程——TCP通信
- java socket编程——UDP通信
- 进程间通信—Socket编程
- Socket编程—Client、Server通信
- Java中的网络编程—Socket通信
- WINSOCK API的Socket编程
- WINSOCK API的Socket编程
- winsock编程,socket建立步骤
- Vc++编程winsock ---Socket(套接字)
- pb基于Winsock的socket编程
- pb基于Winsock的socket编程
- pb基于Winsock的socket编程
- 运维自动化架构
- 折弯它的流,再挂个钩
- java socket编程
- 网络七层模型
- 关于蓝桥杯ds18b20在数码管上显示
- SOCKET通信——winsock编程
- Spring 通过注解配置 Bean(2)
- OpenStack环境下安装Tacker
- 软件公司如何做好产品研发和项目实施的经验和思考
- redis常用命令
- Opencv3.0: undefined reference to cv::imread(cv::String const&, int)
- round
- 单件模式(java)
- 直接寻址表_第11章_散列表_算法导论