1.获取主机IP
IP = getsockname()
2.创建一个TCP套接字(socket.AF_INET
表示使用IPv4,socket.SOCK_STREAM
表示使用TCP)。
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
3.连接到外部服务器
server.connect(('www.baidu.com', 80))
4.内容使用 decode('utf-8')
解码为字符串。
data.decode('utf-8')
5.接收内容,括号内为长度限制
data = clientIP.recv(1024)
6.向客户端发送数据
client.send(message)
7.关闭客户端
clients.close()
8.serversocket.listen(5)
表示开始监听,最多允许5个客户端处于待连接队列中。
serversocket.listen(5)
9.serversocket.accept()
是 Python socket
模块中的一个方法,它用于从服务器的监听队列中接受一个客户端的连接请求。这个函数会阻塞当前线程,直到有一个客户端发起连接,然后返回两个值:一个新的套接字对象和客户端的地址信息。
clientsocket, addr = serversocket.accept()
10.连接主机和端口
serversocket.bind((host, port))
总体代码
服务器
import socket
import threading
def server_revice(clientsocket):
while True:#一直接受,故为死循环
data = clientsocket.recv(1024)
if not data or data.decode('utf-8') == 'exit':
break
print('\n接收到的数据:',data.decode('utf-8'))
def server():
# 创建一个TCP/IP套接字
serversocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#host为主机IP
host = socket.gethostname()
#设置端口号
port = 9999
# 绑定套接字到指定的主机和端口
serversocket.bind((host,port))
# 使服务器套接字进入监听模式
serversocket.listen(5)
while True:
#等待客户端连接
clientsocket,addr = serversocket.accept()
print("连接地址:%s" % str(addr))
#创建一个新的线程
t1 = threading.Thread(target=server_revice,args=(clientsocket,))
t1.start()
t = threading.Thread(target=server)
t.start()
客户端
import socket
import threading
def client_send(server):
while True:
message = input("客户端发送的信息:\n")
server.send(message.encode('utf-8'))
if message == 'exit':
break
def client():
# 创建一个TCP/IP套接字
clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# host为主机IP
host = socket.gethostname()
# 设置端口号
port = 9999
clientsocket.connect((host,port))
t = threading.Thread(target=client_send, args=(clientsocket,))
t.start()
t = threading.Thread(target=client)
t.start()
先运行服务器,再运行客户端,即可实现本地通信