Только для информации, Convert.ToInt32(fooBool)
должен сказать вам, что true
представлен 1, а false
равен 0. (Это произвольное представление в BCL, но не обязательно использующее его память. )
Дело в том, что представление бит действительно должно быть бессмысленным для любого программиста. Булевы предназначены для использования в определенных целях (т. Е. Флаги) и не должны смешиваться с int, иначе использование переменных может стать довольно запутанным.
Я думаю, что вы пытаетесь заставить программу действовать как клиент или как сервер, просто меняя s.send()
на conn.send()
, грустно, это не так просто.
Сокет должен быть инициализирован перед отправкой или получением данных.
Для клиента обычно это что-то вроде этого.
send_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # Create the socket
send_socket.connect((serverIp, serverPort)) # Connect to the server
send_socket.send(data) # Send the data to the server
И как это для Сервера:
listen_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # Create the socket
listen_socket.bind(("0.0.0.0", port)) # Set the socket to accept client from every interface on the port port
listen_socket.listen(1) # Put the server on listen on the port setted before
accept_socket, addr = self.listen_socket.accept() # when a client connect return the socket to talk with it
data = self.accept_socket.recv(buffer_size) # Receive data form the client of max size buffer_size
Из вашего вопроса я предполагаю, что с s.send()
и conn.send()
вы говорите о
, этот пример из python 2.7 socket docs
Вот четыре минимальных примера программ, использующих протокол TCP / IP: сервер, который перекликается со всеми данными, которые он получает обратно (обслуживает только один клиент), и клиент, использующий его. Обратите внимание, что сервер должен выполнять последовательность socket (), bind (), listen (), accept () (возможно, повторить accept () для обслуживания более одного клиента), в то время как клиенту требуется только последовательность socket (), connect (). Также обратите внимание, что сервер не отправляетall () / recv () в сокете, который он прослушивает, а в новом сокете, возвращаемом accept ().
Клиент
Echo client program
import socket HOST = 'daring.cwi.nl' # The remote host PORT = 50007 # The same port as used by the server s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((HOST, PORT)) s.sendall('Hello, world') data = s.recv(1024) s.close() print 'Received', repr(data)
клиент довольно прост в обратном направлении, он создает сокет
s
, а затем после использованияs.connect()
он просто передает данные через него.Сервер
На сервере есть там
s
иconn
Программа эхо-сервера
import socket HOST = '' # Symbolic name meaning all available interfaces PORT = 50007 # Arbitrary non-privileged port s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((HOST, PORT)) s.listen(1) conn, addr = s.accept() print 'Connected by', addr while 1: data = conn.recv(1024) if not data: break conn.sendall(data) conn.close()
в этом первом мы создаем сокет
s
, на котором сервер будет слушать, а затем с помощьюs.accept()
он будет ждать, пока клиент подключится к серверу, а затем вернетconn
, который является гнездом подключенного клиента.Чтобы получать или отправлять данные клиенту, вы должны использовать
conn
.Примечания
Как сказано в документация в этих двух примерах сервер принимает только одного клиента. Поэтому, если вы хотите иметь дело с несколькими клиентами, вам нужно повторить шаг
accept
и, возможно, создать новый поток для каждого клиента, чтобы другим клиентам не приходилось ждать друг друга.
my_socket = s
илиmy_socket = conn
, в зависимости от случая – Tommaso Fontana 13 July 2018 в 20:27