Python:socket之不同的电脑间通信

udp

udp发送数据

import socket

# socket可以在不同的电脑通信,还可以在同一个电脑的不同程序通信
# 创建一个基于udp的网络socket连接
# AF_INET:表示这个socket是用来进行网络连接
# SOCK_DGRAM:表示连接是一个udp连接
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

# 发送数据
# data:要发送的数据,它是二进制的数据
# address:发送给谁,参数是一个元祖,元祖里有两个元素:第0个表示ip地址,第1个表示程序的端口号
# 给192.168.31.199这台主机的9000端口上发送了hello
s.sendto('hello'.encode('utf8'),('192.168.31.199',9000))

# 关闭socket
s.close()

udp接收数据

import socket

# 创建一个基于udp的网络socket连接
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

# 绑定端口号和ip地址
s.bind('192.168.31.199',9000)

# recvfrom接收数据
# content = s.recvfrom()
# print(content)
# 接收到的数据是一个元祖,元祖里有两个元素
# 第0个元素是接收到的数据,第1个元素是发送方的ip地址和端口号
data,addr = s.recvfrom()
print('从{}地址{}端口号接收到了消息,内容是:{}'.format(addr[0],addr[1],data.decode('utf8')))

s.close()

tcp

tcp发送数据

# 客户端

import socket

# 创建一个基于tcp的socket连接
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# 在发送数据之前,必须要先和服务器建立连接
# 调用connect方法连接到服务器
s.connect(('192.168.1.104',9000))

s.send('hello'.encode('utf8'))

# udp直接使用sendto发送数据
# s.sendto('hello'.encode('utf8'),('192.168.1.104',9000))

s.close()

tcp接收数据

import socket

# 创建一个基于tcp的socket连接
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

s.bind(('192.168.1.104',9000))

s.listen(128) # 把socket变成一个被动监听的socket

client_socket,client_addr = s.accept() # 接收客户端的请求,接收到的结果是一个元祖,元阻里有两个元素,第0个元素是客户端的socke连接,第1个元素是客户端的ip地址和端口号t
data = client_socket.recv(1024) # tcp里使用recv获取数据,(udp里接收数据,使用的recvfrom)
print('接收到了{}客户端{}端口号发送的数据,内容是{}'.format(client_addr[0],client_addr[1],data.decode('utf8')))

s.close()

tcp参考链接
https://blog.csdn.net/w18306890492/article/details/82861889

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 PythonSocket 模块实现通过网络发送列表到另一台电脑。 首先,你需要确保两台电脑在同一网络下,并且知道接收方电脑的 IP 地址和端口号。然后,你可以按照以下步骤进行操作: 1. 在发送方电脑上创建 Socket 对象,并连接到接收方电脑: ```python import socket # 创建 Socket 对象 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 设置接收方电脑的 IP 地址和端口号 host = '192.168.0.2' # 接收方电脑的 IP 地址 port = 12345 # 接收方电脑的端口号 # 连接到接收方电脑 s.connect((host, port)) ``` 2. 将列表转换为字符串,并发送给接收方电脑: ```python # 待发送的列表 my_list = [1, 2, 3, 4, 5] # 将列表转换为字符串 my_str = str(my_list) # 发送字符串到接收方电脑 s.send(my_str.encode()) ``` 3. 关闭 Socket 连接: ```python # 关闭 Socket 连接 s.close() ``` 在接收方电脑上,你需要创建一个 Socket 对象并监听指定的端口号,然后从发送方电脑接收数据并转换回列表即可。 完整的代码如下所示: 发送方电脑: ```python import socket # 创建 Socket 对象 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 设置接收方电脑的 IP 地址和端口号 host = '192.168.0.2' # 接收方电脑的 IP 地址 port = 12345 # 接收方电脑的端口号 # 连接到接收方电脑 s.connect((host, port)) # 待发送的列表 my_list = [1, 2, 3, 4, 5] # 将列表转换为字符串 my_str = str(my_list) # 发送字符串到接收方电脑 s.send(my_str.encode()) # 关闭 Socket 连接 s.close() ``` 接收方电脑: ```python import socket # 创建 Socket 对象 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 设置本机的 IP 地址和端口号 host = '' # 本机的 IP 地址 port = 12345 # 本机的端口号 # 监听指定的端口号 s.bind((host, port)) s.listen(1) # 等待客户端连接 conn, addr = s.accept() # 接收数据并转换为列表 data = conn.recv(1024) my_list = eval(data.decode()) # 打印接收到的列表 print(my_list) # 关闭 Socket 连接 conn.close() s.close() ``` ### 回答2: 使用Pythonsocket模块可以实现在计算机之间通过网络发送数据。要发送列表至电脑,首先需要将列表转换为字节流,然后使用socket发送字节流数据。 以下是一个示例代码,演示如何使用socket发送列表至电脑: ```python import socket import pickle # 要发送的列表数据 data = [1, 2, 3, 4, 5] # 将列表数据转换为字节流 data_bytes = pickle.dumps(data) # 创建socket对象 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 填入电脑的IP地址和端口号 ip = '192.168.1.100' port = 12345 # 连接电脑 sock.connect((ip, port)) # 发送数据 sock.sendall(data_bytes) # 关闭socket连接 sock.close() ``` 在上述代码中,首先使用`pickle`模块的`dumps()`函数将列表数据转换为字节流`data_bytes`。接着,创建一个socket对象,并使用`connect()`函数连接到目标电脑的IP地址和端口号。然后,使用`sendall()`函数发送字节流数据。最后,使用`close()`函数关闭socket连接。 在接收方,可以使用相应的socket代码来接收并处理发送的列表数据。 ### 回答3: 使用Pythonsocket模块可以轻松地实现网络通信功能。要发送列表到另一台计算机,可以结合pickle模块将列表序列化为字符串,并使用socket发送字符串数据。 下面是一个示例代码: ```python import socket import pickle # 创建一个列表 my_list = [1, 2, 3, 4, 5] # 将列表序列化为字符串 serialized_list = pickle.dumps(my_list) # 创建一个socket对象 socket_obj = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 连接到目标计算机和端口 target_address = ('目标计算机的IP地址', 1234) # 替换为实际的IP地址和端口号 socket_obj.connect(target_address) # 发送序列化后的列表数据 socket_obj.send(serialized_list) # 关闭连接 socket_obj.close() ``` 以上代码实现了将列表`my_list`发送到指定IP地址和端口号的目标计算机。你需要将代码中的`目标计算机的IP地址`和`1234`替换为实际目标计算机的IP地址和接收程序监听的端口号。 在目标计算机上,你需要编写一个接收程序来接收通过socket发送的数据,并将接收到的字符串数据反序列化为列表。下面是一个简单的示例代码: ```python import socket import pickle # 创建一个socket对象 socket_obj = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定服务器地址和端口 server_address = ('本地计算机的IP地址', 1234) # 替换为实际的IP地址和端口号 socket_obj.bind(server_address) # 开始监听连接 socket_obj.listen(1) # 等待接收客户端连接 print("等待客户端连接...") client_socket, client_address = socket_obj.accept() print("客户端已连接:", client_address) # 接收数据 received_data = client_socket.recv(1024) # 反序列化为列表 received_list = pickle.loads(received_data) # 打印接收到的列表 print("接收到的列表:", received_list) # 关闭连接 client_socket.close() socket_obj.close() ``` 以上代码实现了接收从其他计算机发送过来的列表数据,并将接收到的字符串数据反序列化为列表。你需要将代码中的`本地计算机的IP地址`和`1234`替换为实际的本地计算机的IP地址和接收程序监听的端口号。 希望这个回答对你有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值