나는 자바가 좋다. 나는 하나의 클라이언트와 간단한 채팅 응용 프로그램을 만들려고 노력하고 있지만, 뭔가 옳지 않다. 이해할 수 없다. 그것을 듣고 자 할 때 (바로 직후) 서버에 연결이 끊어집니다. 아이디어는 간단합니다. 클라이언트가 메시지를 보내고 서버가 메시지를 수신하여 다시 보냅니다. 도와주세요...!자바 채팅 서버 - 클라이언트
홈페이지 :
public class main {
public static void main(String[] args) {
Server Server = new Server();
Server.runServer();
Client client = new Client();
client.runForm();
}
}
서버
public class Server {
public static int SERVERA_PORTS = 5432;
private static JTextArea txtMessages;
public static void main(String[] args) {
}
public void runServer() {
//Form
JFrame frame = new JFrame();
txtMessages = new JTextArea();
JPanel pnlContent = (JPanel) frame.getContentPane();
pnlContent.setLayout(new BorderLayout());
pnlContent.add(txtMessages, BorderLayout.CENTER);
txtMessages.setEditable(false);
frame.setSize(500, 400);
frame.setLocation(100, 100);
frame.setTitle("Console");
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setVisible(true);
txtMessages.append("Listening!\n*************************\n");
ServerSocket serverSocket = null;
try{
serverSocket = new ServerSocket(SERVERA_PORTS);
} catch (IOException ex){
return;
}
while(true){
Socket socket = null;
try{
socket = serverSocket.accept();
System.out.println("Client: "+socket.getRemoteSocketAddress()+" connected");
InputStreamReader IntputaReaders = new InputStreamReader(socket.getInputStream());
BufferedReader BuferaReaders = new BufferedReader(IntputaReaders);
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date();
String msg = BuferaReaders.readLine();
System.out.println(dateFormat.format(date)+": "+msg);
//Sends back to clint
PrintStream PrintStrims = new PrintStream(socket.getOutputStream());
if(!"".equals(msg)) {
PrintStrims.println(dateFormat.format(date)+": "+msg);
}
//Puts in GUI
txtMessages.append(socket.getRemoteSocketAddress()+": "+msg+"\n");
} catch (IOException ex){
} finally {
try{
socket.close();
} catch (Exception ex){}
}
}
}
}
채팅 서버와 클라이언트에 대한 클라이언트
public class Client extends JFrame implements ActionListener {
private static JButton btnSend;
private static JButton btnConnect;
private static JTextArea txtMessages;
private static JTextField txtCurrentMessage;
private static JTextField txtServerPort;
private static JTextField txtServerName;
String hosts = "";
int ports;
Socket clientSocket = null;
BufferedReader in = null;
public static void main(String[] args) throws Exception {
}
private void listen() {
try {
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String msgIn;
while ((msgIn = in.readLine()) != null) {
System.out.println(msgIn);
txtMessages.append(msgIn+"\n");
}
}catch (IOException ez) {
}
}
public void connect(){
hosts = txtServerName.getText();
String strPort = txtServerPort.getText();
ports = Integer.valueOf(strPort);
try{
//Ja pieslēdzas
clientSocket = new Socket(hosts, ports);
btnSend.setEnabled(true);
txtMessages.append("U R connected!\n**************\n");
btnConnect.setEnabled(false);
txtCurrentMessage.setEnabled(true);
} catch (IOException ex){
txtMessages.append("Cannot connect.. \n");
}
}
public void send(){
try{
PrintStream PrintStrims = new PrintStream(clientSocket.getOutputStream());
String message = txtCurrentMessage.getText();
PrintStrims.println(message);
System.out.println(message);
} catch (IOException ex){
}
}
public void runForm() {
JFrame frame = new JFrame();
txtServerName = new JTextField();
txtServerName.setPreferredSize(new Dimension(150, 21));
txtServerPort = new JTextField();
txtServerPort.setPreferredSize(new Dimension(50, 21));
txtMessages = new JTextArea();
txtCurrentMessage = new JTextField();
txtCurrentMessage.setPreferredSize(new Dimension(350,21));
btnConnect = new JButton("Connect");
btnConnect.addActionListener(this);
btnSend = new JButton("Send");
btnSend.addActionListener(this);
JPanel pnlTop = new JPanel(new FlowLayout());
JPanel pnlBottom = new JPanel(new FlowLayout());
pnlTop.add(txtServerName);
pnlTop.add(txtServerPort);
pnlTop.add(btnConnect);
pnlBottom.add(txtCurrentMessage);
pnlBottom.add(btnSend);
JPanel pnlContent = (JPanel) frame.getContentPane();
pnlContent.setLayout(new BorderLayout());
pnlContent.add(pnlTop, BorderLayout.NORTH);
pnlContent.add(txtMessages, BorderLayout.CENTER);
pnlContent.add(pnlBottom, BorderLayout.SOUTH);
frame.setLayout(new BorderLayout());
frame.add(pnlTop, BorderLayout.NORTH);
frame.add(txtMessages, BorderLayout.CENTER);
frame.add(pnlBottom, BorderLayout.SOUTH);
frame.setSize(500, 400);
frame.setLocation(100, 100);
frame.setTitle("Ne pārāk labs čats");
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
txtServerName.setText("127.0.0.1");
txtServerPort.setText("5432");
btnSend.setEnabled(false);
txtCurrentMessage.setEnabled(false);
txtMessages.setEditable(false);
frame.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == btnSend) {
if(!"".equals(txtCurrentMessage.getText()))
{
send();
txtCurrentMessage.setText("");
}
}
if (e.getSource() == btnConnect) {
connect();
listen();
}
}
}
로 얻을 수 있는지 확인 할 수 있습니다
의 논리에 문제가 될 수 있을까? – Mordechai
클라이언트가 끊깁니다. – Guy
메시지가 전송 될 때마다 'PrintStrims' 변수를 전역으로 유지하면서 도움을 줍니까? – Mordechai