Java Socket Программирование - PullRequest
0 голосов
/ 14 октября 2010

У меня есть текстовый файл с именами студентов и оценками по предметам. я отправляю этот файл с клиента на сервер, используя

Socket clientSocket = new Socket("127.0.0.1",5432);            
OutputStream os = clientSocket.getOutputStream();            
os.write(clientWriteArr,0,clientWriteArr.length);

и прочитайте этот файл на сервере, используя

ServerSocket sock = new ServerSocket(5432);
Socket serverSocket = sock.accept();
InputStream is = serverSocket.getInputStream();
is.read(serverReadArr,0,serverReadArr.length);

Я изменяю содержимое файла, чтобы все работало нормально. после этого я хочу отправить этот файл обратно клиенту, но не получаю файл на клиенте и также не получаю никаких исключений

Ответы [ 3 ]

2 голосов
/ 14 октября 2010

Вы можете оставить исходный сокет открытым, из которого вы читаете файл, а затем записать результат в тот же сокет, прежде чем закрывать его.Это будет стандартная модель запроса / ответа, подобная той, которая используется для HTTP, и удобна тем, что серверу не нужно знать, как подключиться к клиенту.Дайте нам код для более подробного совета.

1 голос
/ 14 октября 2010

Вам нужен «сервер», чтобы открыть сокетное соединение обратно «клиенту» для отправки данных обратно. «Клиент» должен прослушивать порт, к которому «сервер» хочет подключиться.

В этом случае «Клиент» и «Сервер» имеют двойные роли.

Какое исключение вы получаете?

0 голосов
/ 14 октября 2010

Ваш код на стороне сервера должен выглядеть следующим образом:

ServerSocket serverSocket = new ServerSocket(8999);
Socket socket = serverSocket.accept();

DataInputStream in = new DataInputStream(socket.getInputStream());
DataOutputStream out = new DataOutputStream(socket.getOutputStream());

Здесь in: вы можете прочитать данные, отправленные клиентом.out: вы можете записать данные на клиент

Ваш код клиента должен выглядеть следующим образом:

Socket socket = new Socket("localhost", 8999);
DataInputStream in = new DataInputStream(socket.getInputStream());
DataOutputStream out = new DataOutputStream(socket.getOutputStream());

Здесь in вы можете отправлять данные на сервер.out, вы можете читать данные, отправленные сервером.

Чтение данных из входного потока:

while (true) {
    int c = in.read();
}

, когда вы вызываете in.read(), он будет блокировать текущий поток, пока не прочитает что-то.

Запись данных в выходной поток:

out.write(data);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...