채팅 프로그램.. 입출력 질문입니다.
해지개
1:1 채팅 프로그램을 작성 중입니다.
서버(클라이언트이자 서버), 클라이언트
이렇게 서로 메시지를 주고받은 프로그램을 코딩 중에..
accept();를 통해
서버에 클라이언트가 접속은 되지만 메시지를 보내면 익셉션 에러가 발생합니다..
아마.. 코딩 중에 문제가 있는 것 같은데.. 잘 모르겠습니다.
JJServer.javaimport java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
import socketModule.JServer;
public class JJServer extends Frame implements ActionListener {
private InputStream is;
private ObjectInputStream ois;
private OutputStream os;
private ObjectOutputStream oos;
private static final int PORT_NUM = 9000;
private Panel p;
protected TextArea ta;
private TextField tf;
private ServerSocket sSocket;
private Socket sock;
public JJServer() {
super(Server);
p = new Panel();
ta = new TextArea();
tf = new TextField();
add(p, BorderLayout.NORTH);
add(ta, BorderLayout.CENTER);
add(tf, BorderLayout.SOUTH);
setSize(400, 300);
setVisible(true);
tf.addActionListener(this);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
dispose();
System.exit(0);
}
});
}
public void onServer() {
try {
sSocket = new ServerSocket(PORT_NUM);
ta.append(getTime() + +++++++++++ 서버 동작 +++++++++++ + \n);
sock = sSocket.accept();
ta.append(JServer.getTime() + ***** [ + sock.getInetAddress().getHostAddress() + : + sock.getLocalPort() + ] 접속 ***** + \n);
is = sock.getInputStream();
ois = new ObjectInputStream(is);
os = sock.getOutputStream();
oos = new ObjectOutputStream(os);
} catch (IOException e) {
e.printStackTrace();
}
}
public void actionPerformed(ActionEvent ae) {
Object obj = ae.getSource();
if (obj == tf) {
String sendMsg;
sendMsg = tf.getText();
ta.append(getTime() + [Server] + sendMsg + \n);
tf.setText();
tf.setFocusable(true);
try {
oos.writeObject(sendMsg);
oos.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void receive() {
try {
while (true) {
String receiveMsg = (String)ois.readObject();
ta.append(getTime() + [Client] + receiveMsg + \n);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
JJServer jserver = new JJServer();
jserver.onServer();
}
public static String getTime() {
SimpleDateFormat f = new SimpleDateFormat([hh:mm:ss]);
return f.format(new Date());
}
}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\JJClient.javaimport java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
public class JJClient extends Frame implements ActionListener {
private static final int PORT_NUM = 9000;
private static final String SERVER_IP = 127.0.0.1;
private TextArea ta;
private TextField tf;
private Socket sock;
private InputStream is;
private ObjectInputStream ois;
private OutputStream os;
private ObjectOutputStream oos;
public JJClient() {
super(Client);
ta = new TextArea();
tf = new TextField();
add(ta, BorderLayout.CENTER);
add(tf, BorderLayout.SOUTH);
setSize(400, 300);
setVisible(true);
tf.addActionListener(this);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
dispose();
System.exit(0);
}
});
}
public void onClient() {
try {
sock = new Socket(SERVER_IP, PORT_NUM);
is = sock.getInputStream();
ois = new ObjectInputStream(is);
os = sock.getOutputStream();
oos = new ObjectOutputStream(os);
} catch (IOException e) {
e.printStackTrace();
}
}
public void actionPerformed(ActionEvent ae) {
Object obj = ae.getSource();
if (obj == tf) {
String sendMsg = tf.getText();
ta.append(getTime() + [Client] + sendMsg + \n);
tf.setText();
tf.setFocusable(true);
try {
oos.writeObject(getTime() + [ + sock.getInetAddress().getHostAddress() + : + sock.getLocalPort() + ] + sendMsg);
oos.flush();
} catch (IOException e) {
e.printStackTraceackTrace();
}
}
}
public void receive() {
try {
while (true) {
String receiveMsg = (String)ois.readObject();
ta.append(getTime() + [Server] + receiveMsg + \n);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
JJClient jclient = new JJClient();
jclient.onClient();
}
public static String getTime() {
SimpleDateFormat f = new SimpleDateFormat([hh:mm:ss]);
return f.format(new Date());
}
}
메시지 입출력에 무엇이 문제인지 잘 모르겠습니다..
서버에서 입력한 메시지를 받아와서 클라이언트에 뿌려주는데..
readObject();
writeObject(변수);
만 있으면 되지 않나요..?
BufferedReader를 통해 readLine(); 이 필요한가요?
개념 정리가 잘 되지 않습니다.