Python 3 Socket Server
所有的注释都写在了代码片段中,放在此处,以作记录。
和上一篇client稍有不同,使用多线程进行收发数据。可以考虑将此用于GUI程序…..
#! _*_ coding:utf-8 _*_
'''
我将要写一个标准的socket 服务端程序,书写整个流程
Author:vincent
'''
import socket
import sys
import threading
print("hello world 你好世界")
# 第一步:创建socket
'''
Address Family:可以选择 AF_INET(用于 Internet 进程间通信) 或者 AF_UNIX(用于同一台机器进程间通信)
Type:套接字类型,可以是 SOCKET_STREAM(流式套接字,主要用于 TCP 协议)或者 SOCKET_DGRAM(数据报套接字,主要用于 UDP 协议)
'''
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error as msg:
print("Socket创建失败,失败代码是:" + str(msg[0]) + "失败的信息是:" + msg[1])
sys.exit()
print("socket 创建成功!")
# 第二步:绑定socket
'''
函数 bind 可以用来将 socket 绑定到特定的地址和端口上,它需要一个 sockaddr_in 结构作为参数
'''
host = ''
port = 8088
try:
s.bind((host, port))
except socket.error as msg:
print("Socket绑定失败,失败代码是:" + str(msg[0]) + "失败的信息是:" + msg[1])
sys.exit()
print("socket 成功的绑定了!")
# 第三步:监听连接
'''
函数 listen 可以将 socket 置于监听模式:
该函数带有一个参数称为 backlog,用来控制连接的个数。如果设为 10,那么有 10 个连接正在等待处理,此时第 11 个请求过来时将会被拒绝。
'''
s.listen(10)
print("socket 正在监听连接")
# 第四步:接收客户端连接
def client_thread(conn):
conn.sendall("欢迎登陆服务器!!".encode())
while True:
# 第五步:接收发送数据,将收到的数据返回
data = conn.recv(4096)
print("接收到的数据:" + data.decode())
if not data:
break
conn.sendall('OK...'.encode() + data)
# 第六步:关闭tcp连接,关闭socket
conn.close()
s.close()
# 主线程进行接收客户端连接操作
while True:
conn, addr = s.accept()
print("客户端连接:" + addr[0] + ":" + str(addr[1]))
ct = threading.Thread(client_thread(conn))
# ct.daemon()
ct.start()