socket()模块函数
创建套接字语法
socket(socket_family, socket_type, protocol = 0)
socket_family是AF_UNIX(基于文件)或AF_INET(面向网络);
socket_type是SOCK_STREAM(TCP/IP)或SOCK_DGRAM(UDP/IP)
**
TCP
**
TCP服务端
服务端结构
tcps = socket() #创建服务器套接字
tcps.bind() #把地址绑定到套接字
tcps.listen() #监听链接
while True: #服务器无限循环
tcpc = tcps.accept() #接受客户端链接
while True: #通讯循环
tcpc.recv()/tcpc.send() #对话(接收与发送)
tcpc.close() #关闭客户端套接字
tcps.close() #关闭服务器套接字(可选)
时间戳服务端实例
#!/usr/bin/python3
# -*-coding:utf-8 -*-
from socket import *
import time
COD = 'utf-8'
HOST = '192.168.164.141' # 主机ip
PORT = 21566 # 软件端口号
BUFSIZ = 1024
ADDR = (HOST, PORT)
SIZE = 10
tcpS = socket(AF_INET, SOCK_STREAM) # 创建socket对象
tcpS.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) #加入socket配置,重用ip和端口
tcpS.bind(ADDR) # 绑定ip端口号
tcpS.listen(SIZE) # 设置最大链接数
while True:
print("服务器启动,监听客户端链接")
conn, addr = tcpS.accept()
print("链接的客户端", addr)
while True:
try:
data = conn.recv(BUFSIZ) # 读取已链接客户的发送的消息
except Exception:
print("断开的客户端", addr)
break
print("客户端发送的内容:",data.decode(COD))
if not data:
break
msg = time.strftime("%Y-%m-%d %X") #获取结构化事件戳
msg1 = '[%s]:%s' % (msg, data.decode(COD))
conn.send(msg1.encode(COD)) #发送消息给已链接客户端
conn.close() #关闭客户端链接
tcpS.closel()
TCP客户端
客户端结构
tcpc = socket() # 创建客户端套接字
tcpc.connect() # 尝试连接服务器
while True: # 通讯循环
tcpc.send()/tcpc.recv() # 对话(发送/接收)
tcpc.close() # 关闭客户套接字
时间戳客户端实例
#!/usr/bin/python3
# -*-coding:utf-8 -*-
from socket import *
from time import ctime
HOST = '192.168.164.141' #服务端ip
PORT = 21566 #服务端端口号
BUFSIZ = 1024
ADDR = (HOST, PORT)
tcpCliSock = socket(AF_INET, SOCK_STREAM) #创建socket对象
tcpCliSock.connect(ADDR) #连接服务器
while True:
data = input('>>').strip()
if not data:
break
tcpCliSock.send(data.encode('utf-8')) #发送消息
data = tcpCliSock.recv(BUFSIZ) #读取消息
if not data:
break
print(data.decode('utf-8'))
tcpCliSock.close() #关闭客户端
**
UDP
**
UDP服务端
服务端结构
udps = socket() #创建一个服务器的套接字
udps.bind() #绑定服务器套接字
while True: #服务器无限循环
udps.recvfrom()/udps.sendto() # 对话(接收与发送)
udps.close() # 关闭服务器套接字
时间戳服务端实例
#!/usr/bin/python3
# -*- coding:utf-8 -*-
from socket import *
import time
HOST = '192.168.3.79' #主机ip地址
PORT = 22423 #服务器端口号
SIZE = 1024
ADDR = (HOST, PORT)
udpC = socket(AF_INET, SOCK_DGRAM)
udpC.bind(ADDR)
print("服务器启动...")
while True:
conn, addr = udpC.recvfrom(SIZE)
print('主机[%s]发来消息---->%s'% (addr,conn))
msg = time.strftime("%Y-%m-%d %X")
data = "[%s]:%s" % (msg, conn.decode('utf-8'))
udpC.sendto(data.encode('utf-8'), addr)
UDP客户端
客户端结构
udpc = socket() # 创建客户套接字
while True: # 通讯循环
udpc.sendto()/udpc.recvfrom() # 对话(发送/接收)
udpc.close() # 关闭客户套接字
时间戳客户端实例
#!/usr/bin/python3
# -*-coding:utf-8 -*-
from socket import *
import time
HOST = '192.168.3.79' #服务器ip地址
PORT = 22423 #服务器端口号
SIZE = 1024
ADDR = (HOST, PORT)
udpS = socket(AF_INET, SOCK_DGRAM) #创建socket对象
while True: #通讯循环
msg = input(">>:")
if not msg: continue #输入为空退出当前循环
udpS.sendto(msg.encode('utf-8'), ADDR) #发送消息
conn, addr = udpS.recvfrom(SIZE) #接收消息
print('服务器[%s]发来消息---->%s' % (addr, conn.decode('utf-8')))