Python基础socket一对一聊天室

#--------------------- 服务器端代码--------------------
# -*- coding: UTF-8 -*-
# author :   kele
# time   :  2018/12/27 19:13

# 导入socket
import socket, threading

# 创建一个socket对象
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 获取本机ip
host = socket.gethostname()

# 给定端口
port = 9090

# 服务端ip和端口
server.bind((host, port))

# 最大链接数
server.listen(5)

print('输入enter退出服务器:')

# 阻塞式等待客户端链接,返回链接对象,与链接对象地址
client, addr = server.accept()
print('-'*5+f'服务器被{addr}'+'-'*5)


def outdatas():
    while True:

        # 输入要给客户端的信息
        outdata = input('')
        if outdata=='enter':
            break
        print('发送给客户端:%s'% outdata)
        # 给客户端发送信息
        client.send(outdata.encode('utf-8'))


def indatas():

    while True:
        # 接收来自客户端的信息
        indata = client.recv(1024)
        print('客户端:'+indata.decode('utf-8'))


# 建立多线程
t1 = threading.Thread(target=indatas, name='input')
t2 = threading.Thread(target=outdatas, name='out')

# 启动多线程
t1.start()
t2.start()

# 堵塞线程知道子线程执行完毕,主线程才能结束
# t1.join()
t2.join()

# 关闭服务器
client.close()
print('-'*5+'服务器断开连接'+'-'*5)



#--------------------- 客户端代码--------------------

# -*- coding: UTF-8 -*-
# author :   kele
# time   :  2018/12/27 19:22

# 导入socket包
import socket, threading

# 创建客户端对象
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 目标主机
host = input('请输入目标ip')

# 目标端口
port = 9090

# 连接客户端
client.connect((host, port))
print('-'*5+'已连接到的服务器'+'-'*5)
print('-'*5+'输入enter关闭与服务器的链接'+'-'*5)


def outdatas():
    while True:

        # 输入要发送给服务器的信息
        outdata = input('')

        if outdata=='enter':
            break
        print('发送给服务器:%s'% outdata)
        # 发送给服务器
        client.send(outdata.encode('utf-8'))


def indatas():

    while True:

        # 接收来自服务器的信息
        indata = client.recv(1024)

        # 将接收到的信息,进行编码
        print('服务器:'+indata.decode('utf-8'))


# 建立多线程
t1 = threading.Thread(target=indatas, name='input')
t2 = threading.Thread(target=outdatas, name='out')

# 启动多线程
t1.start()
t2.start()

# 堵塞线程知道子线程执行完毕,主线程才能结束
# t1.join()
t2.join()
# 关闭链接
print('-'*5+'服务器断开连接'+'-'*5)
client.close()

猜你喜欢

转载自blog.csdn.net/keer1303242749/article/details/85311225