解决方案 »
- 定义一个按钮close 来关闭窗口
- 菜鸟求助,请帮我把下面的程序加上注释,以便弄懂
- javaDB 自定编号???
- java获取文件名,如何不包含扩展名?
- 请问:我的程序在eclipse中可以编译运行,在命令行中就不行了呢?
- SQL Server有没有返回信息?JAVA能否得到?
- 为什么张某买不到票?
- 求JAVA中管道的用法!!!
- 写GUI,用JB好,还是用netbeans好?
- 请问关于以文本保存的数值比较排序
- 文件字节流是怎么把字节转换成字符串在文件中显示的
- 求助!jave压缩视频出错! swScaler: Unknown format is not supported as input format
private JTextArea jta = new JTextArea();
private JScrollPane jsp = new JScrollPane(jta);
private JTextField jtf = new JTextField(20);
private JPanel panel = new JPanel();
private JButton btn = new JButton("发送");
private PrintWriter pw = null;public MyServer() {
try {
ServerSocket ss = new ServerSocket(8888);
Socket s = ss.accept();InputStreamReader isr = new InputStreamReader(s.getInputStream());
BufferedReader br = new BufferedReader(isr);pw=new PrintWriter(s.getOutputStream(),true);while (true) {
String msgClient = br.readLine();
jta.append("来自客户端: \n");
jta.append(msgClient + "\n");
}} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String msgServer = jtf.getText();
if (msgServer != null) {
jta.append("来自服务器: \n");
jta.append(msgServer + "\n");
pw.print(msgServer);jtf.setText("");}
}});panel.add(jtf);
panel.add(btn);
jsp.setBorder(new LineBorder(Color.black));
add(jsp, BorderLayout.CENTER);
add(panel, BorderLayout.SOUTH);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("服务器端");
this.setSize(400, 300);
this.setVisible(true);}public static void main(String[] args) {
// TODO Auto-generated method stub
MyServer myClient = new MyServer();
}
}
public class MyClient extends JFrame{
private JTextArea jta=new JTextArea();
private JScrollPane jsp=new JScrollPane(jta);
private JTextField jtf=new JTextField(20);
private JPanel panel=new JPanel();
private JButton btn=new JButton("发送");
private PrintWriter pw=null;
public MyClient(){try {
Socket s = new Socket("127.0.0.1",8888);
InputStreamReader isr=new InputStreamReader(s.getInputStream());
BufferedReader br=new BufferedReader(isr);
pw=new PrintWriter(s.getOutputStream());while(true){String msgServer=br.readLine();
jta.append("来自服务器:\n");
jta.append(msgServer+"\n");}
} catch (Exception e) {e.printStackTrace();
}btn.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e)
{
String msgClient=jtf.getText();
jta.append("来自客户端:\n");
jta.append(msgClient+"\n");
pw.print(msgClient);
jtf.setText("hello");
}});
panel.add(jtf);
panel.add(btn);
jsp.setBorder(new LineBorder(Color.black));
add(jsp,BorderLayout.CENTER);
add(panel,BorderLayout.SOUTH);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("客户端");
this.setSize(400,300);
this.setVisible(true);}
public static void main(String[] args) {
MyClient myClient=new MyClient();
}}
private JTextArea jta = new JTextArea();
private JScrollPane jsp = new JScrollPane(jta);
private JTextField jtf = new JTextField(20);
private JPanel panel = new JPanel();
private JButton btn = new JButton("发送");
private PrintWriter pw = null; public MyServer() { panel.add(jtf);
panel.add(btn);
jsp.setBorder(new LineBorder(Color.black));
add(jsp, BorderLayout.CENTER);
add(panel, BorderLayout.SOUTH); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("服务器端");
this.setSize(400, 300);
this.setVisible(true);
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String msgServer = jtf.getText();
if (msgServer != null) {
jta.append("来自服务器: \n");
jta.append(msgServer + "\n");
pw.println(msgServer); jtf.setText(""); }
} });
try {
ServerSocket ss = new ServerSocket(8888);
Socket s = ss.accept(); InputStreamReader isr = new InputStreamReader(s.getInputStream());
BufferedReader br = new BufferedReader(isr); pw = new PrintWriter(s.getOutputStream(), true); while (true) {
String msgClient = br.readLine();
jta.append("来自客户端: \n");
jta.append(msgClient + "\n");
} } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } public static void main(String[] args) {
// TODO Auto-generated method stub
MyServer myClient = new MyServer();
}
}public class MyClient extends JFrame {
private JTextArea jta = new JTextArea();
private JScrollPane jsp = new JScrollPane(jta);
private JTextField jtf = new JTextField(20);
private JPanel panel = new JPanel();
private JButton btn = new JButton("发送");
private PrintWriter pw = null; public MyClient() { panel.add(jtf);
panel.add(btn);
jsp.setBorder(new LineBorder(Color.black));
add(jsp, BorderLayout.CENTER);
add(panel, BorderLayout.SOUTH); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("客户端");
this.setSize(400, 300);
this.setVisible(true); btn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
String msgClient = jtf.getText();
jta.append("来自客户端:\n");
jta.append(msgClient + "\n");
pw.println(msgClient);
jtf.setText("hello");
} });
try {
Socket s = new Socket("127.0.0.1", 8888);
InputStreamReader isr = new InputStreamReader(s.getInputStream());
BufferedReader br = new BufferedReader(isr);
pw = new PrintWriter(s.getOutputStream(),true); while (true) { String msgServer = br.readLine();
jta.append("来自服务器:\n");
jta.append(msgServer + "\n"); }
} catch (Exception e) { e.printStackTrace();
} } public static void main(String[] args) {
MyClient myClient = new MyClient();
}}
1、Socket是阻塞IO,所以连接服务器或者是服务器等待连接都是阻塞的
2、你都while(true)了,后面绘制Swing界面的代码就执行不到了,也就是看不到界面了
3、你说的关掉eclipse才出现,并不是关掉eclipse时出现,而是关掉服务器时就会出现,还是因为第2点,你绘制界面的代码写在连接服务器之后,且你用了while(true),所以只有当抛出异常时才退出循环,你才能看到界面
4、向socket写入数据用pw.println而不是print,且pw的构造第二个参数要为true(设置自动flush,PrintWriter是缓冲流),这样你才能在另一端读到改完这些你的程序就能正常运行了
把这句代码移动到while(true)中去,我曾经写了一个超级简单的,你可以去看看,模仿qq通信的
https://github.com/thinkMore123/Java-Socket