Найти - Пользователи
Полная версия: TCP/IP client server full duplex
Начало » Python для новичков » TCP/IP client server full duplex
1
Pytonist
Есть клиент:
#!/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() в цикл сервера, то пока я не отправлю сообщениесо стороны сервера, сообщение от клиента не отображается, что впринципе логично, так работает цикл. Получается, надо два бесконечных цикла на прием и передачу, чтобы они работали одновременно. Тогда как это реализовать? или есть какие-то доп. функции специально для этого?
AndrewNovikov
Сервер:
 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)



This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB