(整理)冒险者小游戏模式分析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

苏州科技学院

电子与信息工程学院课程实验报告书课程名称:计算机网络实验班级:计算机0911 班学号:0920107124

姓名:徐镇韬

教师:陶滔

二○一一年十二月

实验四TCP/IP 网络编程实验

一、实验目的

1.掌握TCP/IP 协议的基本知识,TCP/IP 协议的基本工作原理。

2.理解Socket 的基本概念和工作原理,掌握Socket 建立、监听、连接、数据发送和接收的方法。

3.进一步掌握客户/服务器应用程序的设计方法,利用底层的W indows Sockets API

函数实现简单的Winsock 网络应用程序设计,提高Windows 平台上的Socket 编程能力。

二、实验内容

1.设计一程序,利用UDP 实现点对点聊天。

2.设计一程序,实现Web 服务器的基本功能。

三、相关知识

Windows Sockets 规范以U.C. Berkeley 大学BSD UNIX 中流行的Socket 接口为范例定义了一套Micosoft Windows 下网络编程接口。它不仅包含了人们所熟悉的Berkeley Socket 风格的库函数,也包含了一组针对Windows 的扩展库函数,以使程序员能充分地利用Windows 消息驱动机制进行编程。目前的Windows Sockets 2 是一套开放的、支持多种协议的Windows 下的网络编程接口。Winsock 已经基本上实现了与协议无关,使用Winsock 来调用多种协议的功能,但较常使用的是TCP/IP 协议。

根据网络通信的特性,套接字可分为两类:面向连接协议( TCP )的流套接字(SOCK_STREAM )和面向无连接协议( UDP )的数据报套接字( SOCK_DGRAM )。对于要求精确传输数据的Windows Sockets 网络通信程序,一般采用流式套接字。流式

套接字提供了一个面向连接的、可靠的、数据无错的、无重复发送的及按发送顺

序接收数据的服务。其内设流量控制,避免数据流超限,同时,数据被看作是字节流,无长度限制。

套接字可以处于阻塞模式和非阻塞模式。调用一个阻塞模式的函数,都会产生相同的后果——耗费或长或短的时间等待操作完成。而当套接字处于非阻塞模式时,API 函数的调用会立即返回,大多数情况下这些调用会“ 失败”,并返回一个WSAWOULDBLOCK 错误,它表示请求的操作没有时间完成。Winsock 的套接字I/O 模型可以帮助应用程序判断一个套接字何时可供读写。

1. Windows Sockets 主要函数

Socket 实际在计算机中提供了一个通信接口,可以通过这个接口与任何一个

具有

Socket 接口的计算机通信。应用程序在网络上传输、接收的信息都通过这个

Socket 接口来实现。在应用开发中就像使用文件句柄一样,可以对Socket 句柄进行读、写操作。

Windows Sockets API 包括很多函数,但其中最常用的主要函数如下所述:

(1)启动Winsock 服务WSAStartup()

格式:int WSAStartup( WORD wVersionRequested, LPWSADATA lpWSAData );

功能:此函数是对Windows Sockets DLL 进行初始化,只有此函数调用成功后,才可以再调用其他Windows Sockets DLL 的函数。

参数:wVersionRequested 指明程序请求使用的Socket 版本,其中高位字节指明副版本、低位字节指明主版本;lpWSAData 返回请求的Socket 的版本信息。

返回值:成功返回0。

示例:假如一个程序要使用 2.2 版本的Socket ,可用如下程序代码:

WORD wVersionRequested;

WSADATA wsaData;

int err;

wVersionRequested = MAKEWORD( 2, 2 );

err = WSAStartup( wVersionRequested, &wsaData );

(2)终止Windows Sockets 服务WSACleanup()

格式:int WSACleanup (void);

功能:当应用程序不再需要使用Windows Sockets DLL 时,解除与Socket 库的绑定并且释放Socket 库所占用的系统资源。

(3)创建套接字socket()

格式:SOCKET socket(int af,int type,int procotol); 功能:创建一个能够进行网络通信的套接字。

参数:af通指定应用程序使用的通信协议的协议族,对于TCP/IP协议族,该参数置

PF_INET 。

type 要创建的套接字类型,流套接字类型为SOCK_STREAM 、数据报套接

类型为SOCK_DGRAM 。

procotol 指定应用程序所使用的通信协议。返回值:成功返回新创建的套接字的描述符,失败返回INV ALID_SOCKET 。示例:下面的代码是一个创建流套接字的示例:

struct protoent *ppt;

ppe=getprotobyname("tcp");

SOCKET ListenSocket=socket(PF_INET,SOCK_STREAM,ppt->p_proto);

(4)绑定本机地址bind()

格式:int bind(SOCKET s,const struct sockaddr FAR * name,int namelen); 功能:将本机地址与所创建的套接字号联系起来。

参数:s 是由socket()调用返回的并且未作连接的套接字描述符(套接字号)

name指定一个sockaddr 结构。namelen 是name 的

长度。

返回值:成功返回0,否则返回SOCKET_ERROR 。地址结构说明:

相关文档
最新文档