socket实验—简单web服务器

开始补网络的欠账…
这个也是《计算机网络—自顶向下方法》的实验二,后面还有多线程服务器。
这个服务器程序采取的传输层协议是TCP,TCP和UDP的区别就不赘述了,在socket编程上也有区别体现。

局域网ip的获取方法:
终端命令:ifconfig | grep "inet"
在这里插入图片描述

代码:

#import socket module
from socket import *
serverSocket = socket(AF_INET, SOCK_STREAM) #TCP socket 
#Prepare a sever socket 

#Fill in start
serverPort = 12000  #服务器需要指定端口号,客户端不用,OS会自动分配端口号
serverSocket = socket(AF_INET,SOCK_STREAM)
serverSocket.bind(('',serverPort)) #将socket和端口绑定
serverSocket.listen(1) 
#Fill in end 

while True:     
#Establish the connection    
 print('Ready to serve...' )    
 connectionSocket, addr =  serverSocket.accept()
 try:         
    message =  connectionSocket.recv(1024)
    filename = message.split()[1]    #获取客户端想获取的文件名                      
    f = open(filename[1:])
    outputdata = f.read();
    #Send one HTTP header line into socket         
    #Fill in start     
    header = ' HTTP/1.1 200 OK\nConnection: close\nContent-Type: text/html\nContent-Length: %d\n\n' % (len(outputdata))    
    connectionSocket.send(header.encode())
    #Fill in end    

    #Send the content of the requested file to the client
    for i in range(0, len(outputdata)):
        connectionSocket.send(outputdata[i].encode())
    connectionSocket.close()
 except IOError:    #文件不存在发送404 Not Found
    #Send response message for file not found
    #Fill in start
    #Fill in end
    header = ' HTTP/1.1 404 Found'
    connectionSocket.send(header.encode())
    #Close client socket
    #Fill in start
    #Fill in end             
serverSocket.close()

关于socket.listen:
作用是聆听来自客户的TCP最大连接请求,最小为1;
如果是多线程web服务器,listen需要大于1。

结果验证:
打开浏览器,输入http://192.168.0.104:12000/HelloWorld.html
在这里插入图片描述
连着同一个wifi的其他终端也可以访问,4G就不行了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值