2012-02-03 2 views
0

Привет, я написал код для подключения к серверу с помощью сокета. Id хотел бы написать простой код, который позволяет мне отправлять строку на сервер, предполагая, что это будет включать входные и выходные потоки, но я новичок в этом. Ive поставил код, с которым я работаю ниже, любое понимание наилучшего способа выполнить это было бы здорово.Как я могу изменить этот код, чтобы позволить программе моего сокета-клиента отправлять строку на сервер?

import java.net.*; 
import java.io.*; 

public class SocketMarket 
{ 
    public static void main(String [] args) 
    { 
     String serverName = "XX.X.X.XXX"; 
     int port = XXXX; 

     try 
     { 
     System.out.println("Connecting to " + serverName + " on port " + port); 
     Socket client = new Socket(serverName, port); 

     System.out.println("Connected to " + client.getRemoteSocketAddress());   
     } 

     catch(IOException e) 
     { 
     e.printStackTrace(); 
     }  
    } 
} 

Заранее спасибо

ответ

0
client.getOutputStream().write("Hello World".getBytes()); 
client.getOutputStream().flush(); 

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

Основная идея заключается в том, что ваш сервер и клиент будет взаимодействовать друг с другом, используя InputStream «S и OutputStream» с, которые могут быть доступны с помощью SocketgetInputStream() и getOutputStream(), когда связь между ними производится.

Чтобы ваш сервер получал соединения, вы должны использовать входящие соединения ServerSocket для accept().

+0

При использовании входных и выходных потоков мне нужно создать их экземпляр или я могу их называть свободно, пока сокет подключен к серверу? – user1161118

+0

Вы не создадите их. После того, как установлено соединение «Socket», 'InputStream' /' OutputStream' будет открыт и готов к отправке (и получению) данных. JavaDoc, предоставленный в ответе, должен дать больше информации о том, какие условия заставляют потоки закрываться. –

0

Да, это включает в себя OutputStream с. Если вы хотите вывести String s, вы можете написать необработанные байты через OutputStream, который вы получаете из соединения, но затем вы полностью потеряете контроль над кодировкой. Сначала вам нужно узнать об устройствах чтения/записи/потоках, а затем организовать работу через сокеты очень просто. Вы можете найти соответствующую часть обучающих программ Java здесь: http://docs.oracle.com/javase/tutorial/essential/io/ (вы можете полностью игнорировать часть NIO для начала). После этого вы можете узнать о сетевых сетях: http://docs.oracle.com/javase/tutorial/networking/sockets/index.html.