Socket编程原理
更新时间:2023-09-05 02:41:01 阅读量: 教育文库 文档下载
网络编程TCP socket & UDP socket
10/31/2011
Socket 简介1982 - Berkeley Software Distributions 操作 系统引入了sockets 作为本地进程之间通信的 接口 1986 - Berkeley 扩展了socket 接口使之支持 UNIX 下的TCP/IP 通信 现在很多应用 (FTP, Telnet, etc) 都依赖这一 接口
10/31/2011
Socket 简介 简介(2)Socket 是一个编程接口 是一种特殊的文件描述符 (everything in Unix is a file) 并不仅限于TCP/IP 通信协议 面向连接 (Transmission Control Protocol - TCP/IP) 无连接 (User Datagram Protocol -UDP 和 Internetwork Packet Exchange - IPX)
10/31/2011
WinSock从 Berkeley Sockets (Unix)移植包括了许多对windows环境的扩展支持
开放的网络编程接口API 开放 多个厂商提供 winsock 源码和二进制兼容性
最初的Winsock版本是1.1版,在它的基础 上,微软又进一步提供了Winsock2接口。 Winsock2支持多种底层的网络协议,如 TCP/IP、ATM、IPX等10/31/2011 4
Windows Socket, 协议 和应用Application
WinSock.dll
FTP WinSock.dll
Remote Access Service (RAS) TCP/IP IPX AppleTalkNetBIOS
FTP TCP/IP
Modem Phone Line10/31/2011
Network Drivers
LAN5
初始化 Winsockvoid main (void) { /* The following two lines needed for Window's socket */ WORD wVersionRequested = MAKEWORD(2,2); /* WSA 函数的参数 */ WSADATA wsaData; /* WSA 函数的参数 */
Step 1: 指定需要使用的Winsock规范的最高版本 Winsock version 2.2
/* 初始化 winsock */ WSAStartup(wVersionRequested, &wsaData); /* Create a socket */ My_SocketID = socket ( ….. );10/31/2011
Step 2: 初始化 Winsock,装入 Winsock.dll Step 3: 开始使用
Winsock DLL在装入Winsock DLL 之前调用任何 Winsock 函数都会返 回 SOCKET-ERROR 错误. 调用 WSAStartup装入Winsock DLLint WSAStartup( WORD wVersionRequested, LPWSADATA lpWSAData );
wVersionRequested Winsock DLL versionX (high order): sub-version Y (low order): main version MAKEWORD(X,Y)宏定义将两个字节组装成一个WORD10/31/2011 7
Clear winsock在调用 “closesocket” 函数之后 但是在程序结束之前
/* This stuff cleans-up winsock */ WSACleanup( );
10/31/2011
socket ( ) 函数Returns socket ID on success Return INVALID_SOCKET on error
SOCKET socket_id = socket (AF_INET, SOCK_STREAM, 0);“AF_INET” = 使用 IP 协议 “SOCK_STREAM” = 使用 TCP 总是 0
10/31/2011
Basic Socket Calls (socket)// Berkeley 形式 int socket(int family int type, int protocol); // WinSock 形式 SOCKET socket (int family, int type, int protocol);10/31/2011 10
socket (续) 续SOCKET socket (int family, int type, int protocol);
family 是地址族 AF_INET // internet 协议 AF_UNIX // unix internal协议 AF_NS // Xerox NS协议 AF_IMPLINK // Interface Message协议 type SOCK_STREAM // 流式 socket SOCK_DGRAM // 数据报 socket SOCK_RAW // raw socket
protocol 参数通常置为010/31/2011 11
TCP Sockets 编程创建一
个被动模式 (server,服务器)的 socket. 建立应用层的连接 Client/Server 交互在发送和接收数据之前 client 必须调用 connect 连接服务器 server 必须调用 accept 接收client的连接
发送和接收数据. 关闭连接.10/31/2011 12
socket() TCP Sockets 编程基本流程Client
bind() listen() accept()
socket() connect() send()建立连接 数据请求
Server
recv()
recv() close()10/31/2011
数据响应 断连指示
send() recv() close()13
socket()服务器端调用socket创建一个套接字,并在传输层 创建一个套接字, 调用 创建一个套接字 实体中分配表空间,返回一个文件描述符, 实体中分配表空间,返回一个文件描述符, 用于以后调用中使用。 用于以后调用中使用。
bind() listen()
调用bind将某地址赋予,使得远程应用程 将某地址赋予, 调用 将某地址赋予 序能访问本地应用程序。 序能访问本地应用程序。
调用listen分配数据空间,以便存 分配数据空间, 调用 分配数据空间 储多个用户的连接建立请求。 储多个用户的连接建立请求。
accept()
调用accept将本地应用程序阻塞起来, 将本地应用程序阻塞起来, 调用 将本地应用程序阻塞起来 等待接收客户端发来的连接请求。 等待接收客户端发来的连接请求。
close()10/31/2011
释放连接:使用 释放连接:使用close原语单独释放连 原语单独释放连 接。
客户端
socket()调用socket创建一个套接字,并在传输 创建一个套接字, 调用 创建一个套接字 层实体中分配表空间, 层实体中分配表空间,返回一个文件描 述符,用于以后调用中使用。 述符,用于以后调用中使用。
connect()调用connect阻塞应用程序,传输层实 阻塞应用程序, 调用 阻塞应用程序 体开始建立连接,当连接建立完成时, 体开始建立连接,当连接建立完成时, 取消阻塞。 取消阻塞。
close()释放连接:使用 释放连接:使用close原语单独释放连 原语单独释放连 接。10/31/2011 15
数据传输
send()
数据请求
recv()
recv() recv
数据响应
send() send
双方使用send和receive完成 和 双方使用 完成 数据的全双工发送
10/31/2011
Bind ( ) 函数Return code (SOCKET_ERROR if error) Socket ID returned by socket function int status = bind (socket_id, (struct sockaddr_in *) my_addr, sizeof(my_addr)); sockaddr_in 结构, 描述本机的端口和 IP 地址
Sockaddr_in 结构 的字节长度10/31/2011 17
Basic Socket Calls (bind)// Berkeley 形式 int bind(int sockfd, struct sockaddr* addr, int addrLen); // WinSock 形式 int bind(SOCKET sockfd, struct sockaddr* addr, int addrLen);
10/31/2011
bind (续) 续int bind (SOCKET sockfd, struct sockaddr* addr, int ad
drLen); sockfd 由socket() 调用返回 addr 是指向 sockaddr_in 结构的指针,包含 server IP 地址和端口号struct sockaddr_inshort sin_family // address family u_short sin_port // port number struct in_addr sin_addr //IP address (32-bits)
addrLen - sizeof (struct sockaddr_in)10/31/2011 19
正在阅读:
Socket编程原理09-05
妈妈争夺战作文1000字07-10
双体系建设考核奖惩管理制度05-28
船舶主机题库0203-28
双十八烷基甲基氯化铵 D182106-05
论河湟曲艺文化的时代审美特性09-29
关于父亲的作文开头03-12
初二物理测量的初步知识单元过关质量检测题09-16
算法分析大作业04-05
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 原理
- 编程
- Socket
- 历史研究性学习——寻访“丝绸之路”
- 浅谈创业者和创业精神
- CCC电气电子产品类强制性认证实施规则_照明电器_CNCA-01C-022_2007 附件1-4
- 证券投资学试卷A卷(07投资2)
- 葡萄品种学 练习题
- 2 计算机控制系统的分析2011
- 线性拟合+数据计算origin小白教程
- (强烈推荐)特色蔬菜标准化种植加工示范基地建设项目研究报告分析报告
- Windows IIS SQLServer性能测试有关计数器监视及相应的分析方法@
- 离散数学 第三章答案 冯伟森 等编著 机械工业出版社
- 河北公务员考试行测答题技巧:行测常识之中国历史上的改革和变法
- 2015-2020年中国氯化镍市场调研及投资趋势研究报告
- 香港政府常用英汉词汇·消防卷
- 国际快递形式发票样本
- 票据种类总结
- 中国人民银行云南分行2013校园招聘大礼包_笔试面试经验汇总@大街网@应届生校园招聘 制作
- wireshark抓包QQ聊天及网页访问信息
- VB第七章
- 房地产销售部操作流程
- 大学英语视听说4 Unit6