Python实现socket通信:服务端和客户端代码

Python实现socket通信:服务端和客户端代码

服务端代码

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

import socket
def do_server(ip,port):
    ip_port=(ip,port)
    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    #连接地址
    s.bind(ip_port)
    # 开始TCP监听.指定在拒绝连接之前,操作系统可以挂起的最大连接数量。该值至少为 1,大部分应用程序设为 5 就可以了。
    s.listen(5)

    while True:
        c,address =s.accept()
        print("客户端连接地址:",address)
        c.sendall('连接成功!!!'.encode())

        Flag = True
        while Flag:
            #接收 TCP 数据,数据以字符串形式返回,bufsize 指定要接收的最大数据量。
            data = c.recv(1024) #接受客户端传递过来的消息

            # c.send()发送 TCP 数据,将 string 中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于 string 的字节大小。
            # c.sendall()完整发送 TCP 数据。将 string 中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据。成功返回 None,失败则抛出异常。
            c.sendall('服务端回应:已经收到:'.encode()+data)
            if data == 'exit':
                Flag = False
            else:
                print("客户端传递过来的消息是:"+data.decode())

        c.close()
    s.close()
if __name__ == '__main__':
    do_server("localhost", 8005)

示例效果:
在这里插入图片描述

客户端代码

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

import socket
from past.builtins import raw_input

def cli_do(ip,port):
    ip_port=(ip,port)
    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    #主动初始化TCP服务器连接。一般ip_port的格式为元组(hostname,port),如果连接出错,返回socket.error错误。
    s.connect(ip_port)
    s.settimeout(5)
    
    while True:
        #接收 TCP 数据,数据以字符串形式返回,bufsize 指定要接收的最大数据量。flag 提供有关消息的其他信息,通常可以忽略。
        receive_data = s.recv(1024)
        print(receive_data.decode())
        inp = raw_input('要发送给服务端的数据:')

        # conn.send()发送 TCP 数据,将 string 中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于 string 的字节大小。
        # conn.sendall()完整发送 TCP 数据。将 string 中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据。成功返回 None,失败则抛出异常。

        s.sendall(inp.encode())
        if inp == 'exit':
            break
    s.close()
    
if __name__ == '__main__':
    cli_do("localhost", 8005)

示例效果:
在这里插入图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值