Day19:初识socket
一、初识socket
- 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。
socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。
- 简单来说就是两个程序通过“网络”交互数据就使用socket,它只负责两件事:建立连接,传递数据。
- 基于TCP的简单套接字
import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind(('127.0.0.1',8001)) sock.listen(5) while True: print 'waiting....' connection, address = sock.accept() receive = connection.recv(1024) print 'receive the message from client:',receive connection.send("received") connection.close()
import socket obj_client = socket.socket() obj_client.connect(('127.0.0.1',8001)) obj_client.send('help') server_data = obj_client.recv(1024) print server_data obj_client.close()
- 加上循环的套接字
import socket #1、买手机 phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #2、绑定手机卡 phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) #就是它,在bind前加 phone.bind(('127.0.0.1',8082)) #3、开机 phone.listen(5) #4、等电话连接 print('starting...') while True: #连接循环 conn,addr=phone.accept() print('IP:%s,PORT:%s' %(addr[0],addr[1])) #5、收发消息 while True: #通信循环 try: data=conn.recv(1024) #最大收1024 if not data:break #针对linux conn.send(data.upper()) except Exception: break #6、挂电话 conn.close() #7、关机 phone.close()
import socket #1、买手机 phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #2、打电话 phone.connect(('127.0.0.1',8082)) #3、发收消息 while True: msg=input('>>: ').strip() if not msg:continue phone.send(msg.encode('utf-8')) print('has send===>') data=phone.recv(1024) print('has recv') print(data.decode('utf-8')) #4、挂电话 phone.close()
- 基于UDP的简单套接字
import socket ip_port=('127.0.0.1',9000) BUFSIZE=1024 udp_server_client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) udp_server_client.bind(ip_port) while True: msg,addr=udp_server_client.recvfrom(BUFSIZE) print(msg,addr) udp_server_client.sendto(msg.upper(),addr)
import socket ip_port=('127.0.0.1',9000) BUFSIZE=1024 udp_server_client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) while True: msg=input('>>: ').strip() if not msg:continue udp_server_client.sendto(msg.encode('utf-8'),ip_port) back_msg,addr=udp_server_client.recvfrom(BUFSIZE) print(back_msg.decode('utf-8'),addr)

浙公网安备 33010602011771号