socket,它最初做为BSD UNIX的进程通信机制,通常被称做"套接字",如今已经成为windows和mac等其它操作系统所共同遵守的网络编程标准。
socket使用ip+端口+协议的三组组合,来标识一个通信链路。
一、socket 的TCP
Server端代码:
#!/usr/bin/python # -*- coding: utf-8 -*- import socket import datetime HOST = '0.0.0.0' PORT = 3434 # AF_INET ipv4, SOCK_STREAM tcp s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 第一步:建立sockeet s.bind((HOST, PORT)) # 第二步:绑定 服务器及端口 s.listen(5) # 第三步:监听(允许5个并发accept) while True: conn, addr = s.accept() # 第四步:等待接收客户端连接 print 'Client %s connected!' % str(addr) # 输出客户端的连接 dt = datetime.datetime.now() msg = "Current time is " + str(dt) conn.send(msg) # 第五步:接收或发送数据(自动给连接的客户端发送数据) print "Send:", msg conn.close() # 第六步:关闭连接
Client端代码:
#!/usr/bin/python # -*- coding: utf-8 -*- import socket HOST = 'xx.xx.xx.244' # server端ip PORT = 3434 # # AF_INET ipv4, SOCK_STREAM tcp s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 第一步:建立socket s.connect((HOST, PORT)) # 第二步:连接服务器 print "Connect %s:%s"%(HOST, PORT) data = s.recv(1024) # 第三步:收发数据(从服务器接收数据) print "Received:", data s.close() # 第四步:关闭连接
执行结果:
二、socket UDP
UDP相对于TCP没有建立连接、监听、断开连接等概念,UDP有独属于自己的语法 :
recvfrom():从绑定的地址接收数据
sendto():向指定的地址发送数据
Server端:
#!/usr/bin/python # -*- coding: utf-8 -*- import socket HOST = '0.0.0.0' PORT = 3434 # AF_INET ipv4, SOCK_DGRAM udp s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 第一步:建立socket对象 s.bind((HOST, PORT)) # 第二步:绑定 服务器及端口 while True: data, addr = s.recvfrom(1024) # 第三步:接收客户端发送来的消息 print "Recevied: %s from %s"%(data, str(addr)) s.close() # 第四步:关闭连接
Client端:
#!/usr/bin/python # -*- coding: utf-8 -*- import socket HOST = '47.94.57.244' PORT = 3434 # AF_INET ipv4, SOCK_DGRAM udp s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 第一步:建立socket data = "UDP DATA from client.." s.sendto(data, (HOST, PORT)) # 第二步:给服务端发送数据 print "Send:%s to %s:%s"%(data, HOST, str(PORT)) s.close() # 第三步:关闭连接
其它参考:
https://www.cnblogs.com/aylin/p/5572104.html