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)

添加新评论