Уведомления

Группа в Telegram: @pythonsu

#1 Март 6, 2016 16:15:13

Pytonist
Зарегистрирован: 2015-05-27
Сообщения: 36
Репутация: +  1  -
Профиль   Отправить e-mail  

TCP/IP client server full duplex

Есть клиент:

#!/usr/bin/env python
from socket import *
HOST = "127.0.0.1"
PORT = 21567
BUFSIZE = 1024   
ADDR = (HOST, PORT)
tcpCliSock = socket(AF_INET, SOCK_STREAM)
tcpCliSock.connect(ADDR) 
while True:
    msg = input("> ")
    if not msg:
        break
    tcpCliSock.send(bytes(msg, "utf-8")) 
tcpCliSock.close()

Есть сервер:
#!/usr/bin/env python
from socket import *
HOST = ""
PORT = 21567
BUFSIZE = 1024
ADDR = (HOST, PORT)
tcpSerSock = socket(AF_INET, SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)
while True:
    print("waiting for connection...")
    tcpCliSock, addr = tcpSerSock.accept()
    print("Connected from: ", addr)
    while True:
        data = tcpCliSock.recv(BUFSIZE)
        if not data:
            break
        print(data.decode())
    tcpCliSock.close()
tcpSerSock.close()

Подскажите как реализовать дуплексную переписку между клиентом и сервером. Т.к. если я добавляю input() в цикл сервера, то пока я не отправлю сообщениесо стороны сервера, сообщение от клиента не отображается, что впринципе логично, так работает цикл. Получается, надо два бесконечных цикла на прием и передачу, чтобы они работали одновременно. Тогда как это реализовать? или есть какие-то доп. функции специально для этого?

Офлайн

#2 Май 2, 2017 12:15:33

AndrewNovikov
Зарегистрирован: 2017-05-02
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

TCP/IP client server full duplex

Сервер:

 from socket import *
from time import ctime 
HOST = 'localhost'
PORT = 21572
BUFSIZ = 1024
ADDS = (HOST,PORT)
tcpSerSock = socket(AF_INET, SOCK_STREAM)
tcpSerSock.bind(ADDS)
tcpSerSock.listen(2)
while True:
	print('Ожидание первого пользователя...')
	tcpClnt, addr = tcpSerSock.accept()
	print('Первый пользователь подключен...', addr)
	while True:
		data = tcpClnt.recv(BUFSIZ)
		if not data:
			break
		print(ctime())
		print(data.decode())
		tcpClnt.sendall(bytes(ctime(), 'utf-8'))
		tcpClnt.sendall(data)
		dataInput = input('> ').encode()
		tcpClnt.sendall(bytes(ctime(), 'utf-8'))
		tcpClnt.sendall(dataInput)
	tcpClnt.close()
tcpSerSock.close()
Клиент:
 from socket import *
HOST = 'localhost'
PORT = 21572
BUFSIZ = 1024
ADDS = (HOST,PORT)
tcpClntSock = socket(AF_INET, SOCK_STREAM)
tcpClntSock.connect(ADDS)
while tcpClntSock:
	dataInput = input('> ')
	if dataInput == 'stop':
		tcpClntSock.close()
		tcpClntSock = None
	else:
		dataInput = dataInput.encode()
		tcpClntSock.send(dataInput)
		data = tcpClntSock.recv(BUFSIZ).decode()
		data2 = tcpClntSock.recv(BUFSIZ).decode()
		data3 = tcpClntSock.recv(BUFSIZ).decode()
		data4 = tcpClntSock.recv(BUFSIZ).decode()
		print(data)
		print(data2)
		print(data3)
		print(data4)



Отредактировано AndrewNovikov (Май 2, 2017 12:16:29)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version