- 8
- 1
- 约3.88千字
- 约 6页
- 2017-06-07 发布于重庆
- 举报
TCPIP协议编程
TCP/IP协议编程
1.1实验目的:
1、掌握基于TCP/IP协议进行远程通讯的原理
2、掌握Sockets网络程序设计的原理和方法
3、理解面向连接服务、面向无连接的特点
1.2 实验任务
1 学会 Winsock 网络编程基础
2 Winsock控件的属性和方法
1.3 实验环境
Windows98 或Windows2000 操作系统,编译环境任选。
1.4 实验方法
一、实验原理
(一) TCP/IP的特点和Socket
TCP/IP是网络上广泛应用的协议,其中IP是网络层的协议,它是无连接的;TCP是传输层的协议,它是面向连接的。在实际系统中,TCP/IP通常在操作系统内核中实现,用户所能感受到的和可以用来进行网络程序开发的是操作系统提供的网络编程界面。在TCP/IP网络环境下,网络编程界面称为套接字(Socket)(见图1)。
应用程序1
应用程序2
Socket
TCP/IP协议核心
图1、TCP/IP协议核心与应用程序关系图
图1中的应用程序1和2可以是位于不同主机上的2个进程,他们的作用方式是客户/服务器模式。
1、 Sockets编程原理
(1) Sockets编程中的主要概念
●协议、地址、端口:
在Sockets编程中,传输层的协议既可以是TCP,也可以是UDP。
Sockets是用于网间进程通讯的,因此在标识上要进行网间进程标识。地址是标识主机的,在Sockets编程中通常指IP地址;而端口标识通信的进程,它可以是1-65535间的任何一个数字,其中1-255保留给特定的服务、256-1023保留给其它的一般服务(如路由函数)、1024-4999可以被任意的客户机端口使用、5000-65535可以被任意的服务器端口使用。地址+端口就实现了网间进程标识。
(协议、本地地址、本地端口号、远程地址、远程端口号)是一组五元相关。
●面向连结、无连接、Socket类型:
传输层中的TCP协议是面向连接的,UDP协议是无连接的,因此Socket主要有两种类型:流套接字用于TCP/IP编程,提供面向连接的服务;数据报套接字用于UDP/IP编程,提供无连接的服务。
●网络字节顺序:
不同的计算机存放多字节值的顺序不同,为保证数据的正确性,在网络协议中必须指定网络字节顺序。TCP/IP协议使用16位整数和32位整数的高位先存格式。在编程中,调用htons()和htonl()函数来转换端口(短整型数值)和地址(长整型数值)参数的字节顺序
(2) Sockets编程原理
●创建套接字:用socket()来创建套接字。
●指定本地地址:用bind()来指定本地地址。
●侦听连接:面向连接的服务中,服务器套接字在socket()和bind()后,就要调用listen()来侦听客户机的请求。
●建立套接字连接:面向连接的服务中,客户机在socket()和bind()之后,要调用connect()来向服务器请求连接,服务器在侦听到客户机的请求后,要调用accept()来接受连接。
●数据传输:当一个连接建立以后,就可以传输数据了。在传输数据时,用到send()和recv()。
●输入/输出多路复用:用select()函数指定你想等待数据的套接字,当数据被套接字接收到以后,select()返回,并确定在输入队列中哪个套接字在等待数据,然后,就可以接收数据。
●关闭套接字:用closesocket()函数关闭套接字,并释放分配给该套接字的资源。
2、 使用已封装好的类进行Windows Sockets编程
以上所提到的WinSock编程的方法和函数是标准Sockets调用和WinSock API所提供的,在Windows环境下使用任何编程语言、开发环境都可以实现。现在,很多开发环境都提供了已经封装好的用于Windows Sockets编程的类,这些现成的类使得WinSock的程序开发更方便、快速。
客户机 服务器
Listen socket 连接插口
socket() socket()
bind() bind
listen()
connect()
accept() (创建连接插口)
send()
原创力文档

文档评论(0)