s = socket.socket([family[, type[, proto]]])
参数类型:
- family: 套接字家族,可以使
AF_UNIX
或者AF_INET
。 - type: 套接字类型,根据是面向连接的还是非连接分为
SOCK_STREAM
或SOCK_DGRAM
,也就是TCP和UDP的区别。 - protocol: 一般不填默认为0。
- 服务端
s.bind(host, port) #绑定主机和端口号 连接远程vps,ip地址为vps的ip,通过ifconfig查看
s.listen([backlog]) #启动一个服务,并进行监听, backlog参数可选,指定系统最大的连接数,超过这个数,程序将拒绝连接
s.accept() #接受一个连接,返回值是一个元组(conn, address), conn是一个新的socket对象,address是连接这个socket进程绑定的地址
- 客户端
ip_port = (ip, port) #要连接的主机的ip地址和端口号,注意数据是元组
s.connect(ip_port) #connect函数实现连接到 远程套接字
s.connect_ex() #相比于connect函数,这个函数不会抛出异常,而是返回一个错误码(errno)
- 通用的方法
#通过socket传输的数据都是二进制(bytes)类型,也就是说需要 encode() decode() *** 作
s.recv(bufsize) #接受数据函数,bufsize指定一次接受的数据大小
#下面两个方法要求已经建立socket连接
s.send() #发送数据(经过encode), 返回值是发送数据的大小
s.sendall() #成功返回None, 发送失败抛出一个异常
s.sendto(bytes, address) #address指定目的套接字
二、使用socket实例
1、服务端与客户端进行通信
实现功能:本机
与远程主机
进行的通信
注意:server端绑定的是vps主机的ip地址,client端连接的是vps的公网地址
server.py 服务端
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#s.create_server(('', 8888)) #create_server创建的是一个socket对象
ip_port =(('ip', 7777)) #这里的ip地址为vps的地址,而不是公网地址
s.bind(ip_port)
s.listen()
print("-----start socket server, waiting for connect-----")
conn, address = s.accept()
while True:
client_data = conn.recv(1024).decode()
if client_data == "exit":
exit("connection close")
print(f"recv from {address} data is :{client_data}")
conn.sendall("the server has received message".encode())
conn.close()
client.py 客户端
import socket
s = socket.socket()
s.connect(("ip", 7777)) #这个地方的地址需要是公网ip,这样才能找到这台主机
while True:
inp = input("plz input something you need to translate:").strip()
s.sendall(inp.encode())
if inp == "exit":
print("close connection")
break
response = s.recv(1024).decode()
print(response)
s.close()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)