Сокет
из программы c отправляет 3 числа в сокет в Python. код и вывод ниже:
код сервера Python:
import SocketServer
import threading
import select
import sys
class TCPHandler(SocketServer.StreamRequestHandler):
def handle(self):
self.data = self.rfile.readline()
print "%s wrote:" % self.client_address[0]
print (self.data)
self.request.send(str(long(self.data)+1000))
cur_connex.append({'ip': self.client_address, 'range': [long(self.data), long(self.data)+10000]})
for a in cur_connex:
print("%s did %d - %d on thread %s" % (a['ip'], a['range'][0], a['range'][1], threading.current_thread().name))
while True:
select.select([self.rfile], [], [])
self.data = self.request.recv(10) #also tried "self.data = self.rfile.readline().strip("\n")" and without "strip()"
print self.data
if __name__ == "__main__":
HOST, PORT = "", 50001
cur_connex = []
done_up_to = 0
# Create the server, binding to localhost on port 50001
server = SocketServer.TCPServer((HOST, PORT), TCPHandler)
# Activate the server on new thread
listen_thread = threading.Thread(target=server.serve_forever, name='listen_th')
listen_thread.start()
код клиента c ++:
for(unsigned long long i; i < perfect_numbers.size(); i++)
{
cout << "i is " << i << " writing " << perfect_numbers[i] << "\n";
for(int j = 0; j < perfect_numbers[i].size(); j++)
{
cout << perfect_numbers[i][j] << "|";
}
if(write(sock, perfect_numbers[i].c_str(), sizeof(perfect_numbers[i].c_str())) == -1)
{
cerr << "\nwrite failed: " << strerror(errno) << "\n";
return -1;
}
}
if(close(sock) == -1)
{
cerr << "close sock error: " << strerror(errno) << "\n";
return -1;
}
cout << "exiting...\n";
return 1;
вывод сервера:
>>> 127.0.0.1 wrote:
12695
('127.0.0.1', 55624) did 12695 - 22695 on thread listen_th
28
496
8128
... а затем непрерывные переводы строк
вывод клиента:
that took 1.26624 seconds
i is 0 writing 28
2|8|
|i is 1 writing 496
4|9|6|
|i is 2 writing 8128
8|1|2|8|
|exiting...
Я предполагаю, что последний бит клиентской программы C ++ достаточно. Также предполагается, что это что-то в этом цикле while True
на сервере. Я плохо знаком с обоими этими языками, я знаю, что мое кодирование еще не очень хорошее, будьте осторожны ...