У меня есть 2 клиентских сокета. Каждый из них имеет свой собственный AWT.Frame в качестве графического интерфейса для чата. На стороне сервера у меня есть ServerSocket с двумя потоками, созданными для обработки каждого из клиентов.
Запись сообщения в поток выполняется правильно, но я не могу его прочитать ... и оба потока также завершаются (я думаю, в основном из-за некоторого исключения ... NullPointer, но не отображается на консоли) после того, как я нажму "отправить"Кнопка "на обоих окнах клиента ..
Код ChatServer.main ()
public static void main(String args[])throws IOException
{
boolean listening=true;
try
{
try
{
server=new ServerSocket(12591);
}catch(IOException e)
{
System.out.println("Couldn't listen to specified port as it might be already used by some other service");
System.exit(1);
}
System.out.println("Waiting for some client to initiate connection...");
//while (listening)
//{
new ChatServerThread(server.accept()).start();
System.out.println("Connected to User1!");
new ChatServerThread(server.accept()).start();
System.out.println("Connected to User2!");
//}
}catch(SocketException e)
{
System.out.println(e.getMessage());
}
server.close();
}
Код ChatServerThread.constructor () и метод run () (ChatServerThread расширяет поток)
public ChatServerThread(Socket s)
{
super("ChatServerThread"+(++count));
socket = s;
try
{
in=new DataInputStream(socket.getInputStream());
out=new DataOutputStream(socket.getOutputStream());
}catch(IOException e)
{
System.out.println("Problem getting I/O connection");
System.exit(1);
}
}
public void run()
{
while(true)
{
try
{
String s = in.readUTF();
if(s.equals("DISCONNECT~!@#"))
{
break;
}else
{
ChatServer.chatMsgs.add(s);
System.out.println(s);
//makeClients.c1.display.append(s);
//makeClients.c2.display.append(s);
ChatClient.addMsg2Disp(s);
}
}catch(IOException e)
{
System.out.println("IOException occured");
}
}
}
Методы ChatClient (имеет GUI): его конструктор, реализованный метод Listener:
public ChatClient()
{
setLayout(new BorderLayout());
bottomPanel=new Panel(new FlowLayout());
bottomPanel.add(txtEntry=new TextArea(4,80));
bottomPanel.add(send=new Button("Send"));
bottomPanel.add(disconnect=new Button("Disconnect"));
add(bottomPanel, BorderLayout.SOUTH);
display=new TextArea();
//display.setEditable(false);
add(display, BorderLayout.CENTER);
try
{
client=new Socket(InetAddress.getLocalHost(), 12591);
in = new DataInputStream(client.getInputStream());
out = new DataOutputStream(client.getOutputStream());
}catch(UnknownHostException e)
{
System.out.println("Local Host cannot be resolved on which the server is runnig");
System.exit(1);
}catch(IOException e)
{
System.out.println("Problem acquiring I/O Connection.");
System.exit(1);
}
send.addActionListener(this);
disconnect.addActionListener(this);
}
public void actionPerformed(ActionEvent ae)
{
if(ae.getSource().equals(send))
{
try
{
if(!(txtEntry.getText().trim().equals("")))
{
out.writeUTF(txtEntry.getText());
out.flush();
}
}catch(IOException e)
{
System.out.println("IOException occured");
}
}
else if(ae.getSource().equals(disconnect))
{
}
}
static void addMsg2Disp(String msg)
{
display.append(msg);
}
и, наконец, есть еще 1 класс makeClients, который создает 2 объекта класса ChatClient и устанавливаетразмер, видимость и т. д. кадра ....
Я думаю, это большой вопрос, но я не могу понять, почему не может принять .. любого, кто мог бы помочь мнезаранее!:)
PS: и это не настоящее приложение .. я изучаю сокеты JAVA .. поэтому просто пытаюсь закодировать что-то вроде этого ..