소켓 프로그래밍 (자동 온라인 채팅 도구) --Python3

디렉토리

@

도 1을 참조하면, 서버는 클라이언트 연결을 지원합니다

서버 프로그램 (server.py) :

import socket

# 创建服务端socket对象
server = socket.socket()
# 绑定IP(ipocnfig命令查看ip地址)和端口(自定义网络端口,不和系统已有端口冲突就可以使用)
server.bind(('192.168.5.106', 8000))
# 可以等待5个连接
server.listen(5)
# 等待客户端连接,如果没有连接,则持序等待
# conn:客户端与服务端连接的对象,服务端通过该对象进行收发数据
# addr:客户端地址信息
print('服务端已经运行,等待客户端连接……')
conn, addr = server.accept()  # 在这里会阻塞,只有客户端进行连接,才获取客户端连接然后开始进行通行
print('有人来连接了!')
data = conn.recv(1024)  # 1024:服务端获取数据一次最多获取1024byte
print('客户端给我发了:', data)
conn.send(b'May I help you?')
conn.close()  # 与客户端断开连接
server.close()  # 关闭服务端的服务

클라이언트 프로그램 (client.py) :

import socket

# 创建客户端socket对象
client = socket.socket()
client.connect(('192.168.5.106', 8000))  # 阻塞,只有连接成功,代码才会继续执行
client.send(b'hello')  # 连接服务端后给服务端发送消息
data = client.recv(1024)  # 等待服务端发送的消息
print('服务端给我回复了:',data)
client.close()  # 关闭连接

서버가 실행 중입니다 :

서버가 이미 실행중인 클라이언트 연결을 기다리고 ......
누군가가 연결!
클라이언트는 나를 보내신 : b'hello '

클라이언트 실행 :

서비스 나 대답 제공 : b'May 나는 '당신을 도와 드릴까요?

2, 서버는 멀티 클라이언트 연결을 지원합니다

서버 (server.py) :

import socket

# 创建服务端socket对象
server = socket.socket()
# 绑定IP和端口
server.bind(('192.168.5.106', 8000))
# 可以等待5个连接
server.listen(5)
# 等待客户端连接,如果没有连接,则持序等待
# conn:客户端与服务端连接的对象,服务端通过该对象进行收发数据
# addr:客户端地址信息
while True:
    print('服务端已经运行,等待客户端连接……')
    conn, addr = server.accept()  # 在这里会阻塞,只有客户端进行连接,才获取客户端连接然后开始进行通行
    print('有人来连接了!')
    data = conn.recv(1024)  # 字节类型
    resp = data + ',你好!'.encode('utf-8')
    print('已发送“', resp.decode('utf-8'), '”给客户端……')
    conn.send(resp)  # 字节类型
    conn.close()
    print('服务端断开连接……', '\n')

클라이언트 프로그램 (client.py) :

import socket

# 创建客户端socket对象
client = socket.socket()
client.connect(('192.168.5.106', 8000))  # 阻塞,只有连接成功,代码才会继续执行
name = input('输入你的姓名吧:')
client.send(name.encode('utf-8'))  # 将字符串转换为字节,连接服务端后给服务端发送这个字节
resp = client.recv(1024)  # 阻塞,等待服务端发送的消息
print(resp.decode('utf-8'))
client.close()  # 关闭连接

서버는 기록을 실행합니다 :

서버가 이미 실행중인 클라이언트 연결을 기다리고 ......
누군가가 연결!
보낸 "Thanlon, 안녕하세요!"... 클라이언트에
서버 차단 ...

서버가 이미 실행중인 클라이언트 연결을 기다리는 ...
누군가가 연결!
보낸 "국화, 안녕하세요!"... 클라이언트에
서버 차단 ...

서버가 이미 실행중인 클라이언트 연결을 기다리는 ...

클라이언트는 기록을 실행합니다 :

당신의 이름을 입력 그것을 : Thanlon
! Thanlon이, 안녕하세요
클라이언트가 1을 실행 :

클라이언트 2 실행 기록 :

당신의 이름에게 그것을 입력 : 국화
국화를, 안녕하세요!

3, 자동 온라인 채팅

서버 프로그램 (server.py) :

import socket

# 创建服务端socket对象
server = socket.socket()
# 绑定IP和端口
server.bind(('192.168.5.106', 8000))
# 可以等待5个连接
server.listen(5)
# 等待客户端连接,如果没有连接,则持序等待
# conn:客户端与服务端连接的对象,服务端通过该对象进行收发数据
# addr:客户端地址信息
while True:
    print('\n系统提示:服务端已经运行,等待客户端连接……')
    conn, addr = server.accept()  # 在这里会阻塞,只有客户端进行连接,才获取客户端连接然后开始进行通行
    print('系统提示:' + str(list(addr)) + '客户端已连接本服务端……\n')
    while True:
        data = conn.recv(1024)  # 字节类型
        if data == b'0':
            break
        print('系统提示:已接收客户端发来的信息:“' + data.decode('utf-8') + '”')
        resp = data + ',你好!'.encode('utf-8')
        print('系统提示:已发送“', resp.decode('utf-8'), '”给客户端……')
        conn.send(resp)  # 字节类型
        print('系统提示:与' + str(list(addr)) + '客户端的连接未关闭,可继续和该客户端进行对话……')
    conn.close()
    print('系统提示:与' + str(list(addr)) + '客户端的连接已关闭……')

클라이언트 프로그램 (client.py) :

import socket

# 创建客户端socket对象
client = socket.socket()
client.connect(('192.168.5.106', 8000))  # 阻塞,只有连接成功,代码才会继续执行
while True:
    name = input('系统提示,请输入您的姓名(输入0关闭连接):\n')
    client.send(name.encode('utf-8'))  # 将字符串转换为字节,连接服务端后给服务端发送这个字节
    if name == '0':
        break
    resp = client.recv(1024)  # 阻塞,等待服务端发送的消息
    print('系统提示:客户端回复“' + resp.decode('utf-8') + '”')
client.close()  # 关闭连接
print('系统提示:关闭客户端连接!')

서버는 기록을 실행합니다 :

프롬프트 : 서버가 클라이언트에서 연결 요청을 실행하고있다 ...
메시지 : [ '192.168.5.106', 57892] ... 클라이언트가 연결되어있는이 서버는

메시지가 : "Thnlon": 클라이언트에서 보낸 수신 된 정보를
...... "안녕하세요, Thnlon!"를 보낸 클라이언트 : 메시지가
메시지 :와 [ '192.168.5.106'는 57892] 클라이언트 연결이 종료되지 않으며, 클라이언트는 대화 ...에 종사하는 계속
팁 시스템 : "국화": 클라이언트가 보낸 정보 수신
시스템 프롬프트를 클라이언트로 전송! "국화, 안녕하세요"...
메시지 :와 [ '192.168.5.106', 57892] 클라이언트 연결이 종료되지 않고 계속 될 수있다 클라이언트 대화 ...
메시지 :와 [ '192.168.5.106', 57892] 클라이언트 연결이 닫혀있다가 ...

... 서버가 이미 클라이언트 연결을 기다리고, 실행 : 메시지가
메시지 : [ '192.168.5.106' , 57939] 연결된 클라이언트 서버가 ... 현재

시스템 프롬프트 : "마리아"클라이언트가 전송받은 메시지
시스템 프롬프트를 보내! "마리아, 안녕하세요"클라이언트를 ...
'와 [: 메시지 192.168.5.106 '57939] 클라이언트 연결이 종료되지 않으며, 클라이언트가 대화에 참여 계속 ......
메시지 :와 [ '192.168.5.106'는 57939]가 닫은 클라이언트에 연결 ......

메시지 : 서버가 이미 클라이언트 연결을 기다리고, 실행 ......

클라이언트 최종 실행 기록 :

메시지가 표시되면 사용자 이름 (연결을 종료하려면 0을 입력)를 입력하십시오
Thnlon
시스템 프롬프트 : 클라이언트는 응답 "안녕하세요, Thnlon을!"
프롬프트, 당신의 이름 (연결을 종료하려면 0을 입력)를 입력하십시오 :
국화는
메시지 : 클라이언트 "!, 안녕하세요, 국화"응답
당신의 이름을 (연결을 종료하려면 0을 입력)를 입력하십시오하라는 메시지 :
0
시스템 : 클라이언트 연결을 해제!

이 클라이언트 측 실행 기록 :

메시지가 표시되면, 당신의 이름을 (연결을 종료하려면 0을 입력)를 입력하십시오 :
마리아
메시지 : 클라이언트 응답! "마리아, 안녕하세요"
프롬프트, 당신의 이름 (연결을 종료하려면 0을 입력)를 입력하십시오 :
0
시스템 : 고객 끄기 최종 연결!

물론 클라이언트의 수있을 수 있습니다 ......

추천

출처www.cnblogs.com/qikeyishu/p/11111931.html