python设置Internet_python简单网络服务器

发布时间 2023-08-15 15:27:41作者: donggee3

服务器建立TCP连接的过程有4步

1、实例化一个socket对象

sock = socket.socket(socket.F_INET,socket.SOCK_STREAM)

2、设置或得到socket选项

python定义了setsockopt()和getsockopt(),一个是设置选项,一个是得到设置。这里主要使用setsockopt(),设置socket选项的结构为:

setsockopt(level,optname,value),参数表示:选项,意义,期望值

level==SOL_SOCKET,表示正在使用的socket选项

optname,如果level选择SOL_SOCKET,那么optname可以选择:

SO_BINDTODEVICE:可以使socket只在某个特殊的网络接口(网卡)有效。也许不能是移动便携设备;一个字符串给出设备的名称或者一个空字符串返回默认值

SO_BROADCAST:允许广播地址发送和接收信息包。只对UDP有效。如何发送和接收广播信息包;布尔型整数

SO_DONTROUTE:禁止通过路由器和网关往外发送信息包。这主要是为了安全而用在以太网上UDP通信的一种方法。不管目的地址使用什么IP地址,都可以防止数据离开本地网络;布尔型整数

SO_KEEPALIVE:可以使TCP通信的信息包保持连续性。这些信息包可以在没有信息传输的时候,使通信的双方确定连接是保持的;布尔型整数

SO_OOBINLINE:可以把收到的不正常数据看成是正常的数据,也就是说会通过一个标准的对recv()的调用来接收这些数据;布尔型整数

SO_REUSEADDR:当socket关闭后,本地端用于该socket的端口号立刻就可以被重用。通常来说,只有经过系统定义一段时间后,才能被重用;布尔型整数,本次使用它

sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)

这里value设置为1,表示将SO_REUSEADDR标记为TRUE,操作系统会在服务器socket被关闭或服务器进程终止后马上释放该服务器的端口,否则操作系统会保留几分钟该端口

3、绑定socket

sock.bind(('127.0.0.1',8001))

4、侦听连接

sock.listen(5)

5、代码汇总

import socket
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
sock.bind(("127.0.0.1",8001))
sock.listen(10)
while True:
    conn,addr = sock.accept()
    buff = conn.recv(2048)
    print(buff)
    conn.send(b"HTTP/1.1 200 ok \r\n\r\n")
    conn.send(b"hello world!")
    conn.close()
sock.close()