网络基础之socket
socket
我们知道IP层的ip地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程,这样我们可以利用ip地址+协议+端口号唯一标示网络中的一个进程。能够唯一标示网络中的进程后,它们就可以利用socket进行通信了.
什么是socket呢?我们经常把socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。
socket 示例:
服务端(python实现):
import socket #创建一个socket对象 server = socket.socket() #相当于创建了一部电话 ip_port = ('192.168.111.1',8001) #创建一个电话卡 server.bind(ip_port) #插上电话卡 server.listen(5) #监听着电话,我能监听5个,接到一个电话之后,后面还能有四个人给我打电话,但是后面这四个人都要排队等着,等着我第一个电话挂掉,再来第6个的时候,第六个人的手机会报错 print('11111') #等着别人给我打电话,打来电话的时候,我就拿到了和对方的这个连线通道conn和对方的电话号码addr conn,addr = server.accept() #阻塞住,一直等到有人连接我,连接之后得到一个元祖,里面是连线通道conn和对方的地址(ip+端口) print('22222') print(conn) print('>>>>>>>>>',addr) while True: from_client_data = conn.recv(1024) #服务端必须通过两者之间的连接通道来收消息 from_client_data = from_client_data.decode('utf-8') print(from_client_data) if from_client_data == 'bye': break server_input = input('明威说>>>>:') conn.send(server_input.encode('utf-8')) if server_input == 'bye': break conn.close() #挂电话 server.close() #关手机
客户端:
#_*_coding:utf-8_*_ import socket import time client = socket.socket() server_ip_port = ('192.168.111.1',8001) client.connect(server_ip_port) while True: client_input = input('小文说>>>>:') client.send(client_input.encode('utf-8')) #给服务端发送消息 if client_input == 'bye': break from_server_data = client.recv(1024) print('来自服务端的消息:',from_server_data.decode('utf-8')) if from_server_data.decode('utf-8') == 'bye': break client.close() #客户端挂电话
注意:先运行server,然后再运行client,然后你会发现client这个文件再输出台的地方让你输入内容,你输入一个内容然后回车,你会发现server那边的控制台就输出了以client发送的内容
详细的一些关于socket以及tcp以及udp协议传输的可看 : https://www.cnblogs.com/jin-xin/articles/10064978.html