Python Socket 模块
January 15, 2021 Python学习 访问: 70 次
官方介绍
Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。
python-模块
import socket
创建socket
socket
函数有三个参数
- 参数一
family
:可以使AF_UNIX
(仅限于本机进程之间通信) 或者AF_INET
(本机进程通信和多个机器网络通信) - 参数二
type
:指明通信协议是面向连接的(SOCK_STREAM,tcp)还是非连接(SOCK_DGRAM,udp)的 - 参数三
protocol
:一般不填默认为 0
socket.socket([family[, type[, proto]]])
实例
监听一个端口,让另外一个机器nc去连接,会输出一句话
import socket
from my_print import print_log
import requests
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM,0)
s.bind(("0.0.0.0",9999))#绑定本机以及监听的端口
print_log(s.getsockname(),2)
s.listen(5)#开始tcp监听
client_socket, addr = s.accept()#等待别人连接 ,返回别人连接的模块以及IP地址、端口
print_log(client_socket,1)
print_log(addr,1)
client_socket.send("hello,this is server".encode("utf-8"))#发送一句话
client_socket.close()#关闭远程连接
s.close()#关闭自身监听
客户端py3
脚本:
import socket
s = socket.socket()
s.bind(('0.0.0.0',12345))#指定本机的端口
print(s.getsockname())
s.connect(('10.211.55.2',9999))
data = s.recv(0x100)
s.close
print(data)
输出:
❯ python3 connect_socket.py 1 ↵
('0.0.0.0', 12345)
b'hello,this is test'
客户端也可通过nc
来进行连接
❯ nc 10.211.55.2 9999 1 ↵
hello,this is test
root@ubuntu ~
❯
服务端和客户端进行交互
服务端:
import socket
from my_print import print_log
import requests
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM,0)
s.bind(("0.0.0.0",9999))#绑定本机以及监听的端口
print_log(s.getsockname(),2)
s.listen(5)#开始tcp监听
client_socket, addr = s.accept()#等待别人连接 ,返回别人连接的模块以及IP地址、端口
print_log(client_socket,1)
print_log(addr,1)
client_socket.send("hello,this is server".encode("utf-8"))#发送一句话
msg = client_socket.recv(0x100)
print_log(msg,2)
client_socket.close()#关闭远程连接
s.close()#关闭自身监听
客户端:
import socket
s = socket.socket()
s.bind(('0.0.0.0',12345))
print(s.getsockname())
s.connect(('10.211.55.2',9999))
data = s.recv(0x100)
s.send("hi,i am client".encode("utf-8"))
s.close()
print(data)