什么是Socket
- 官方解释:Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议
- 个人粗浅理解:Socket就是管道,当用户发送请求时,Socket在目的与本地之间建立管道,将TCP/IP协议通过这个管道承载起来,最终让Socket去决定数据的传输。
代码实现
Server(左手)
import socket #导入套接字模块
from threading import Thread
#打开
server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #创建socket对象,AF_INET:ipv4; SOCK_STREAM:TCP; SOCK_DGRAM:UDP
server_socket.bind((('127.0.0.1',8888))) #绑定对应的地址和端口
server_socket.listen(10) #设置最大连接数
print('******Server******')
new_socket,address=server_socket.accept() #阻塞等待
#收发
# 发送内容
def send_msg():
while True:
msg = input()
new_socket.send(msg.encode(encoding='utf-8'))
# 接收数据
def recv_data():
while True:
data = new_socket.recv(1024)
print('client:', data.decode())
if __name__=='__main__':
send_thread=Thread(target=send_msg)
recv_thread=Thread(target=recv_data)
send_thread.start()
recv_thread.start()
#关闭
# new_socket.close()
# server_socket.close()
Client(右手)
import socket
from threading import Thread
#打开
client_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client_socket.connect(('127.0.0.1',8888))
print('******Client******')
#收发
# 发送数据
def send_msg():
while True:
msg = input()
client_socket.send(msg.encode(encoding='utf-8'))
# 接收数据
def recv_data():
while True:
data = client_socket.recv(1024)
print('server:', data.decode())
if __name__=='__main__':
send_thread=Thread(target=send_msg)
recv_thread=Thread(target=recv_data)
send_thread.start()
recv_thread.start()
#关闭
# client_socket.close()
聊天记录
参考链接:
https://blog.csdn.net/stoic163/article/details/102473886
https://www.cnblogs.com/clschao/articles/9585555.html#part_2