Python调用远程Socket接口

本文介绍了如何使用Python实现Socket通信客户端,包括链接远程接口服务、发送和接收数据的详细步骤,并提供了一个简易的服务器端代码进行测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Web应用通信通常都喜欢用HTTP接口,但不排除直接socket通信的情况。

socket除了server端构建麻烦些(需要考虑很多实际情况),对于调用者来说构建个client端其实不比http麻烦多少。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Auther: linvo

import socket


class Client(object):
    """
    调用远程Socket接口
    <code>
    try:
        obj = Client(host, port)
        ret = obj.send(data)
    except Exception, e:
        ret = e
    </code>
    """
    def __init__(self, host, port, timeout = 5):
        """
        链接远程接口服务
        """
        self.sock = None
        try:
            socket.setdefaulttimeout(timeout) 
            self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
            self.sock.connect((host, port))
        except socket.error, e:
            raise Exception('SOCKET ERROR:' + str(e))
        except Exception, e:
            raise Exception('CONNECT ERROR:' + str(e))



    def send(self, data):
        """
        socket通信
        发送和接收
        data: 发送的数据
        ret: 接收的数据
        """
        ret = None
        # 链接成功,开始传输
        if self.sock:
            data = str(data)
            try:
                result = self.sock.sendall(data)
            except Exception, e:
                result = str(e)

            if result is not None:
                raise Exception('SEND ERROR:' + str(result))
            else:
                # 接收 
                ret = ''
                try:
                    while True:
                        buffer = self.sock.recv(2048)
                        if buffer: 
                            ret += buffer
                        else:
                            break
                except Exception, e:
                    raise Exception('RECV ERROR:' + str(e))
        return ret

顺便给个简易的server端,以便测试:

import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('localhost', 9801))
sock.listen(5)
while True:
    connection, address = sock.accept()
    try:
        connection.settimeout(5)
        buf = connection.recv(2048)
        connection.send(buf)
    except socket.timeout:
        print 'time out'
    connection.close()


你可以使用Pythonsocket模块来实现与远程服务器的通信。下面是一个简单的示例代码,展示了如何在客户端和服务器之间建立基本的socket连接: 客户端代码: ```python import socket # 定义远程服务器的IP地址和端口号 host = '远程服务器IP地址' port = 远程服务器端口号 # 创建socket对象 client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 连接远程服务器 client_socket.connect((host, port)) # 发送数据到服务器 data = 'Hello, server!' client_socket.sendall(data.encode()) # 接收服务器返回的数据 response = client_socket.recv(1024).decode() print('服务器返回的数据:', response) # 关闭socket连接 client_socket.close() ``` 服务器端代码: ```python import socket # 定义本地服务器的IP地址和端口号 host = '本地服务器IP地址' port = 本地服务器端口号 # 创建socket对象 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定地址和端口号 server_socket.bind((host, port)) # 监听客户端连接 server_socket.listen(1) print('等待客户端连接...') # 接受客户端连接 client_socket, addr = server_socket.accept() print('客户端已连接:', addr) # 接收客户端发送的数据 data = client_socket.recv(1024).decode() print('接收到的数据:', data) # 发送响应给客户端 response = 'Hello, client!' client_socket.sendall(response.encode()) # 关闭与客户端的连接 client_socket.close() # 关闭服务器socket server_socket.close() ``` 在以上示例中,客户端通过调用`socket.connect()`方法连接到远程服务器,并使用`socket.sendall()`方法发送数据。服务器端通过调用`socket.bind()`方法绑定本地地址和端口号,并通过`socket.listen()`方法监听客户端连接。一旦有客户端连接成功,服务器端使用`socket.accept()`方法接受客户端连接,并使用`socket.recv()`方法接收客户端发送的数据,并使用`socket.sendall()`方法发送响应给客户端。最后,关闭客户端和服务器的socket连接。 请注意,在代码中需要替换`远程服务器IP地址`、`远程服务器端口号`、`本地服务器IP地址`和`本地服务器端口号`为实际的IP地址和端口号。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值