服务器与主机之间的通信

1.获取主机IP

IP = getsockname()

2.创建一个TCP套接字(socket.AF_INET 表示使用IPv4,socket.SOCK_STREAM 表示使用TCP)。

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

3.连接到外部服务器

server.connect(('www.baidu.com', 80))

4.内容使用 decode('utf-8') 解码为字符串。

data.decode('utf-8')

5.接收内容,括号内为长度限制

data = clientIP.recv(1024)

6.向客户端发送数据

client.send(message)

7.关闭客户端

clients.close()

8.serversocket.listen(5) 表示开始监听,最多允许5个客户端处于待连接队列中。

serversocket.listen(5)

9.serversocket.accept() 是 Python socket 模块中的一个方法,它用于从服务器的监听队列中接受一个客户端的连接请求。这个函数会阻塞当前线程,直到有一个客户端发起连接,然后返回两个值:一个新的套接字对象和客户端的地址信息。

clientsocket, addr = serversocket.accept()

10.连接主机和端口

serversocket.bind((host, port))

总体代码

服务器
import socket
import threading


def  server_revice(clientsocket):
    while True:#一直接受,故为死循环
        data = clientsocket.recv(1024)
        if not data or data.decode('utf-8') == 'exit':
            break
        print('\n接收到的数据:',data.decode('utf-8'))


def server():
    # 创建一个TCP/IP套接字
    serversocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    #host为主机IP
    host = socket.gethostname()
    #设置端口号
    port = 9999
    # 绑定套接字到指定的主机和端口
    serversocket.bind((host,port))
    # 使服务器套接字进入监听模式
    serversocket.listen(5)

    while True:
        #等待客户端连接
        clientsocket,addr = serversocket.accept()
        print("连接地址:%s" % str(addr))

        #创建一个新的线程
        t1 = threading.Thread(target=server_revice,args=(clientsocket,))
        
        t1.start()
       

t = threading.Thread(target=server)
t.start()
客户端
import socket
import threading

def client_send(server):
    while True:
        message = input("客户端发送的信息:\n")
        server.send(message.encode('utf-8'))
        if message == 'exit':
            break

def client():
    # 创建一个TCP/IP套接字
    clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # host为主机IP
    host = socket.gethostname()
    # 设置端口号
    port = 9999

    clientsocket.connect((host,port))

    
    t = threading.Thread(target=client_send, args=(clientsocket,))
    
    t.start()

t = threading.Thread(target=client)
t.start()

先运行服务器,再运行客户端,即可实现本地通信

在Python中,Socket(套接字)是一种用于创建网络连接的基本机制,可以用于在主机之间交换数据。以下是基本的步骤来创建一个简单的TCP服务器和客户端的例子,以实现主机之间通信: **服务器端(Server.py):** ```python import socket def start_server(): # 创建一个socket对象 server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定IP地址和端口 server_address = ('localhost', 12345) server.bind(server_address) # 设置最大连接数 server.listen(1) print(f"服务器已启动,等待连接 on {server_address}") while True: # 等待客户端连接 client, client_address = server.accept() print(f"连接来自: {client_address}") # 接收客户端的消息并回应 request = client.recv(1024).decode('utf-8') response = f"你好,从{client_address}收到消息: {request}" client.sendall(response.encode('utf-8')) # 关闭连接 client.close() if __name__ == "__main__": start_server() ``` **客户端(Client.py):** ```python import socket def connect_client(): # 创建一个socket对象 client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 连接到服务器 target = ("localhost", 12345) client.connect(target) # 发送消息到服务器 message = input("请输入消息: ") client.send(message.encode('utf-8')) # 接收服务器响应 received_message = client.recv(1024).decode('utf-8') print(f"服务器回复: {received_message}") # 关闭连接 client.close() if __name__ == "__main__": connect_client() ``` 运行上述两个脚本,服务器启动后,客户端连接上去输入消息,服务器会回应。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值