实验5 套接字编程:生成网络应用

目录

一、实验目的及任务

二、实验环境

三、预备知识

四、实验步骤


一、实验目的及任务

1.通过编码实现书中示例进一步明白网络应用C/S体系结构的特点;

2.明白使用UDP/TCP的网络应用程序中客户端和服务器的相关套接字活动及其区别;

3.学会使用套接字进行相关网络应用程序的编写。

二、实验环境

联网的计算机;主机操作系统为Windows。

三、预备知识

开始这个实验之前,需要复习课本2.7节的内容。

四、实验步骤

 PS:注意将下文中的serverName的值替换成自己设备的主机名(在cmd中使用hostname指令获取)

1.实现课本2.7节中的示例:

(1)分别运行使用了UDP和TCP的网络应用程序,结果截屏

UDP网络应用程序:

UDPClient.py

from socket import *
serverName='LAPTOP-E11JBC26'
serverPort=12000
clientSocket=socket(AF_INET,SOCK_DGRAM)
message=input('Input lowercase sentence:')
clientSocket.sendto(message.encode(),(serverName,serverPort))
modifiedMessage,ServerAddress=clientSocket.recvfrom(2048)
print(modifiedMessage.decode())
clientSocket.close()

UDPServer.py

from socket import *
serverPort=12000
serverSocket=socket(AF_INET,SOCK_DGRAM)
serverSocket.bind(('',serverPort))
print('The Server is ready to receive')
while True:
    message,clientAddress=serverSocket.recvfrom(2048)
    modifiedMessage=message.decode().upper()
    serverSocket.sendto(modifiedMessage.encode(),clientAddress)

 运行结果:

TCP网络应用程序:

TCPClient.py

from socket import *
serverName='LAPTOP-E11JBC26'
serverPort=12000
clientSocket=socket(AF_INET,SOCK_STREAM)
clientSocket.connect((serverName,serverPort))
sentence=input('Input lowercase sentence:')
clientSocket.send(sentence.encode())
modifiedSentence=clientSocket.recv(1024)
print('From Server:',modifiedSentence.decode())
clientSocket.close()

 TCPServer.py

from socket import *
serverPort=12000
serverSocket=socket(AF_INET,SOCK_STREAM)
serverSocket.bind(('',serverPort))
serverSocket.listen(1)
print('The server is ready to receive')
while True:
    connectionSocket,addr=serverSocket.accept()
    sentence=connectionSocket.recv(1024).decode()
    capitalizedSentence=sentence.upper()
    connectionSocket.send(capitalizedSentence.encode())
    connectionSocket.close()

运行结果:

(2)完成课本118页的P28题。

a.在运行TCPServer之前运行TCPlient;无法运行,因为无法建立TCP连接 

b.在运行UDPServer之前运行UDPClient;正常运行,因为没有发送建立连接的请求

c.客户端和服务端使用不同端口,将TCPServer的端口号由12000改为1200

如果使用不同的端口号,则客户端将尝试建立TCP连接错误的进程或不存在的进程,导致出现错误

2.使用所熟悉的语言进行套接字编码,自行设计和实现一个网络应用程序,可参考课本119页编程作业。

(1)详细描述应用的具体功能

在这个编程作业中,你将用Python语言开发一个简单的Web服务器,它仅能处理一个请求。具体而言,你的Web服务器将:(1)当一个客户(浏览器)联系时创建一个连接套接字;(2)从这个连接套接字接收HTTP请求;(3)解释该请求以确定所请求的特定文件;

(4)从服务器的文件系统获得请求的文件;(5)创建一个由请求的文件组成的HTTP响应报文,报文前面有首部行;(6)经TCP连接向请求浏览器发送响应。如果浏览器请求一个在该服务器种不存在的文件,服务器应当返回一个“404 Not Found”差错报文。
       在配套网站中,我们提供了用于该服务器的框架代码,我们提供了用于该服务器的框架代码。你的任务是完善该代码,运行服务器,通过在不同主机上运行的浏览器发送请求来测试该服务器。如果运行你服务器的主机上已经有一个Web服务器在运行,你应当为该服务器使用一个不同于80端口的其他端口。

(2)遵循代码规范,添加主要注释

Web服务器

from socket import * #导入python套接字编程的库
serverSocket=socket(AF_INET,SOCK_STREAM) #创建一个TCP欢迎套接字
serverSocket.bind(('',1234)) #将TCP欢迎套接字绑定到指定端口1234
serverSocket.listen(1) #设置服务器最大连接客户机数目为1

while True:
    #建立TCP连接
    print('Ready to Server')
    connectionSocket,addr=serverSocket.accept(); #创建一个TCP连接套接字,等待与客户端联系
    try:
        message=connectionSocket.recv(1024); #当建立了联系(accept()后),获取客户端发送的报文
        fileName=message.split()[1]
        f=open(fileName[1:])
        outputdata=f.read() #从报文中读取信息
        header='HTTP/1.1 200 OK\nConnection: close\nConnent-Type: text/html\nConnent-Length: %d\n\n'%(len(outputdata))
        connectionSocket.send(header.encode())

        #将服务器上请求到的网页返还给客户端
        for i in range(0,len(outputdata)):
            connectionSocket.send(outputdata[i].encode())

        connectionSocket.close() #关闭TCP连接套接字

    except IOError:
        #如果连接建立失败:请求的文件找不到,则返回错误信息
        header='HTTP/1.1 404 Not Found'
        connectionSocket.send(header.encode())

        connectionSocket.close() #关闭TCP连接套接字

serverSocket.close() #关闭TCP欢迎套接字

参考博客:https://blog.csdn.net/qq_41708792/article/details/101596849

运行结果:

成功

失败

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值