怎么样让服务器和客户端都能获取到对方的消息,并且输出在方框内。
package CNT;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.InetAddress;
import java.net.Socket;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class AClient extends JFrame implements ActionListener, Runnable {
private Socket socket;
private int Port = 1200;
private String ip;
private JTextArea area = new JTextArea("聊天内容:\n");
private JTextField field = new JTextField("");
public AClient(){
this.setTitle("客户端");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.add(field,BorderLayout.NORTH);
field.addActionListener(this);
this.add(area, BorderLayout.CENTER);
this.setSize(350, 290);
this.setLocation(550, 200);
this.setVisible(true);
try{
ip = "127.0.0.1";
socket = new Socket(ip,Port);
OutputStream os = socket.getOutputStream();
PrintStream ps = new PrintStream(os);
ps.println("客户端连接");
new Thread(this).start();
}catch (Exception ex){
}
}
public void run(){
try{
while(true){
InputStream is = socket.getInputStream();
BufferedReader bf = new BufferedReader(new InputStreamReader(is));
String str = bf.readLine();
area.append(str + '\n');
}
}catch (Exception ex){
}
}
public void actionPerformed(ActionEvent e){
try{
OutputStream os = socket.getOutputStream();
InputStream is = socket.getInputStream();
PrintStream ps = new PrintStream(os);
ps.println("客户端说:" + field.getText());
field.setText("");
}catch (Exception ex){
}
}
public static void main(String[] args) {
new AClient();
}
}
package CNT;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class AServer extends JFrame implements ActionListener,Runnable {
private int Port = 1200;
private ServerSocket SS;
private Socket socket;
private JTextArea area = new JTextArea("聊天内容:"+'\n');
private JTextField field = new JTextField("");
public AServer(){
this.setTitle("服务器");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.add(area,BorderLayout.CENTER);
this.add(field,BorderLayout.NORTH);
field.addActionListener(this);
this.setSize(350, 290);
this.setLocation(550, 200);
this.setVisible(true);
try{
SS = new ServerSocket(Port);
socket = SS.accept();
new Thread(this).start();
}catch(Exception ex){
}
}
public void run(){
try{
while(true){
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String str = br.readLine();
area.append(str + '\n');
}
}catch(Exception ex){
}
}
//执行的操作
public void actionPerformed(ActionEvent e){
try{
OutputStream os = socket.getOutputStream();
PrintStream ps = new PrintStream(os);
ps.println("服务器说:" + field.getText());
field.setText("");
}catch(Exception ex){
}
}
public static void main(String[] args){
new AServer();
}
}
你应该把try写在while里面,这样读取数据超时了就继续读取
否则只要超时就直接退出了
此外,你应该多写异步方法,接收到数据之后自动调用方法,而不是搞个线程一直在这阻塞着