网络编程计算机网络报告.docx

上传人:b****2 文档编号:18517859 上传时间:2023-08-19 格式:DOCX 页数:12 大小:587.25KB
下载 相关 举报
网络编程计算机网络报告.docx_第1页
第1页 / 共12页
网络编程计算机网络报告.docx_第2页
第2页 / 共12页
网络编程计算机网络报告.docx_第3页
第3页 / 共12页
网络编程计算机网络报告.docx_第4页
第4页 / 共12页
网络编程计算机网络报告.docx_第5页
第5页 / 共12页
网络编程计算机网络报告.docx_第6页
第6页 / 共12页
网络编程计算机网络报告.docx_第7页
第7页 / 共12页
网络编程计算机网络报告.docx_第8页
第8页 / 共12页
网络编程计算机网络报告.docx_第9页
第9页 / 共12页
网络编程计算机网络报告.docx_第10页
第10页 / 共12页
网络编程计算机网络报告.docx_第11页
第11页 / 共12页
网络编程计算机网络报告.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

网络编程计算机网络报告.docx

《网络编程计算机网络报告.docx》由会员分享,可在线阅读,更多相关《网络编程计算机网络报告.docx(12页珍藏版)》请在冰点文库上搜索。

网络编程计算机网络报告.docx

网络编程计算机网络报告

工业计算机网络实验报告

实验3:

计算机网络实验——网络编程1

一、实验目的:

(1)熟悉和掌握网络编程的基本方法和步骤;

(2)进一步理解client/server交互模式;

(3)加深学生对于网络协议概念的理解以及协议的设计和实现方法。

二、实验任务:

使用任意网络编程语言(Java、C、VB、Delphi等)编写网络选课模拟程序,它由client和server两部分组成,client和server之间的通信基于TCP协议。

实现数据的收发。

三、网络编程:

大多数网络应用程序都遵从client/server交互模型。

该模型中,服务器应用是一种专门用来提供某一种服务的程序,它被动地等待通信,而客户应用主动地启动通信,请求服务器的服务。

服务器程序既可以接收信息也能发送信息,还可以成为客户。

TCP/UDP赋予每个服务一个唯一的协议端口号。

服务器程序通过协议端口号来指定它所提供的服务,然后被动地等待通信。

客户在发送连接请求时,必须说明服务器程序运行主机的IP地址和协议端口号来指定它所希望的服务。

服务器端计算机通过此端口号将收到的请求转向正确的服务器程序。

大多数网络编程语言都提供或者使用控件封装了套接字应用程序接口(SocketAPI),应用程序通过套接字接口调用来实现和传输层交互。

用户目前可以使用两种套接口,即流套接字TCP和数据报套接字UDP。

流式套接字定义了一种可靠的面向连接的服务,提供了双向的,有序的,无重复并且无记录边界的数据流服务。

数据报套接字定义了一种无连接的服务,支持双向的数据流,但并不保证是可靠,有序,无重复的。

也就是说,一个从数据报套接字接收信息的进程有可能发现信息重复了,或者和发出时的顺序不同。

数据报套接字的一个重要特点是它保留了记录边界。

套节字API主要包括表1所示的接口。

使用面向连接的套接字编程,通过图2来表示其时序。

套接字工作过程如下:

服务器首先启动,通过调用socket()建立一个套接字,然后调用bind()将该套接字和本地网络地址联系在一起,再调用listen()使套接字做好侦听的准备,并规定它的请求队列的长度,之后就调用accept()来接收连接。

客户在建立套接字后就可调用connect()和服务器建立连接,连接一旦建立,客户机和服务器之间就可以通过调用read()和write()来发送和接收数据。

最后,待数据传送结束后,双方调用close()关闭套接字。

 

表1套节字API主要接口

接口

解释

SOCKET

BIND

LISTEN

ACCEPT

CONNET

SEND

RECV

CLOSE

创建一个新的套接字

给服务器绑定一个传输层地址

将服务器设为被动模式

接收客户的一个请求

客户向服务器发起连接

向一个连接的套接字发送数据

从一个连接的套接字接收数据

终止一个连接

四.程序设计及编程思路

设计思路

大多数网络应用程序都遵从client/server交互模型。

该模型中,服务器应用是一种专门用来提供某一种服务的程序,它被动地等待通信,而客户应用主动地启动通信,请求服务器的服务。

服务器程序既可以接收信息也能发送信息,还可以成为客户。

TCP/UDP赋予每个服务一个唯一的协议端口号。

服务器程序通过协议端口号来指定它所提供的服务,然后被动地等待通信。

客户在发送连接请求时,必须说明服务器程序运行主机的IP地址和协议端口号来指定它所希望的服务。

服务器端计算机通过此端口号将收到的请求转向正确的服务器程序。

SETCOURSE指令:

当接收到client发送的GETCOURSE协议消息,返回该用户已经选择的所有课程名字;

GETCOURSE指令:

当接收到client发送的SETCOURSE协议消息,记录用户名和课程名,以便client使用GETCOURSE命令查询;

SHUTDOWN指令:

当接收到client发送的SHUTDOWN协议消息,检查用户是否有此权限,如果有则结束server程序

服务器端:

窗体设计:

2文本框,txtServerPort用来输入打开的端口号,txtTCPChat用来实现来自客户端输入的数据;WinSock控件,命名为WinsockTCP;两个按钮,一个命名为cmdOpenPort,用来打开端口号,同时设置WinsockTCP控件为监听状态;另一个按钮用来推出服务器应用程序,命名为cmdClose.具体代码如下:

OptionExplicit

DimHostNameAsString*256

DimHostIPAsString

DimcolHostNameAsCollection'存储用户

DimcolHostcourseAsCollection'存储用户所选择的课程名

PrivateSubForm_Load()

'获取本地计算机的名称和IP

HostName=WinsockTCP.LocalHostName

HostIP=WinsockTCP.LocalIP

'初始化端口号为1024

txtServerPort.Text=1024

EndSub

PrivateSubcmdOpenPort_Click()

IfTrim$(txtServerPort.Text)=vbNullStringThen

MsgBox"请指定端口号!

"

ExitSub

EndIf

'设置服务器的端口号

WinsockTCP.LocalPort=CLng(Trim$(txtServerPort.Text))

'服务器端WinSockTCP空间执行监听功能

WinsockTCP.Listen

EndSub

PrivateSubcmdClose_Click()

UnloadMe

EndSub

PrivateSubWinsockTCP_ConnectionRequest(ByValrequestIDAsLong)

OnErrorGoToerr

'检查控件的State属性是否为关闭的

'如果不是,在接受新的连接之前先关闭此连接

IfWinsockTCP.State<>sckClosedThen

WinsockTCP.Close

EndIf

'利用WinSock控件响应请求

'同时相集合中加入该客户端的地址

colHostName.AddWinsockTCP.RemoteHostIP

WinsockTCP.AcceptrequestID

err:

MsgBoxerr.Description

EndSub

PrivateSubWinsockTCP_DataArrival(ByValbytesTotalAsLong)

DimsDataAsString

DimscourseAsString

DimjAsLong

scourse="请选择序号:

1、单片机;2、传感器;3、电力电子技术;4、PLC;5、PLD;"

OnErrorGoToerr

WinsockTCP.GetDatasData

txtTCPChat.Text=Trim$(txtTCPChat.Text)&_

Trim$(sData)&vbCrLf

IfsData="getcourse"Then

WinsockTCP.SendDatascourse

'ElseIfsData="sendcourse"

‘不会了

EndIf

err:

MsgBoxerr.Description

EndSub

PrivateSubWinsockTCP_Close()

UnloadWinsockTCP

EndSub

代码:

客户端:

窗体设计:

txtClientChat用来显示客户端程序传送的文本、txtRemotePort用来输入远程服务器的端口、txtTCPHost用来设置远程服务器的名称、txtClientInput用来输入文本;

1个WinSock控件TcpClient,用来连接服务器端,并完成与服务器端交互的功能;4个标准按钮控件,cmdTCPCnn用来与服务器端建立连接、cmdTCPClose用来关闭所建立的连接、cmdClientClear用来清空聊天窗口、cmdClientSend用来向服务器端发送用户输入的文字。

具体代码如下:

OptionExplicit

‘全局变量声明

DimHostNameAsString*256

DimHostIPAsString

PrivateSubForm_Load()

'获得本地计算机的名称和IP

HostName=TcpClient.LocalHostName

HostIP=TcpClient.LocalIP

txtClientChat.Enabled=False

txtClientInput.Enabled=False

'设置默认连接的服务器名和端口

txtRemotePort.Text=1024

txtTCPHost.Text="sunny"

EndSub

PrivateSubcmdTCPCnn_Click()

IfTrim$(txtTCPHost.Text)=vbNullStringOr_

Trim$(txtRemotePort.Text)=vbNullStringThen

MsgBox"请输入远程主机名和端口!

"

ExitSub

EndIf

TcpClient.RemoteHost=Trim$(txtTCPHost.Text)

TcpClient.RemotePort=CLng(Trim$(txtRemotePort.Text))

TcpClient.Connect

EndSub

PrivateSubcmdTCPClose_Click()

OnErrorGoToerr

'断开与服务器的连接

TcpClient.Close

staTcpCnn.Panels

(1).Text="已退出系统!

"

ExitSub

err:

MsgBoxerr.Description

EndSub

PrivateSubcmdClientClear_Click()

txtClientChat.Text=vbNullString

EndSub

PrivateSubcmdClientSend_Click()

OnErrorGoToerr

DimsSendAsString

'发送输入的文本

sSend=Trim$(txtClientInput.Text)

TcpClient.SendDatasSend

ExitSub

err:

MsgBoxerr.Description

EndSub

PrivateSubTcpClient_Connect()

'如果连接成功,那么文本框可用

txtClientChat.Enabled=True

txtClientInput.Enabled=True

staTcpCnn.Panels

(1).Text="连接成功!

"

EndSub

PrivateSubTcpClient_DataArrival(ByValbytesTotalAsLong)

'该事件用来接收从服务器反回的数据,并显示

OnErrorGoToerr

DimsDataAsString

TcpClient.GetDatasData

txtClientChat.Text=txtClientChat.Text&sData&vbCrLf

ExitSub

err:

MsgBoxerr.Description

EndSub

PrivateSubTcpClient_Close()

TcpClient.Close

staTcpCnn.Panels

(1).Text="服务器关闭……"

EndSub

五:

运行界面

编译环境:

 

 

以下为运行环境:

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 职业教育 > 职业技术培训

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2