java吧 关注:1,245,548贴子:12,721,511
  • 11回复贴,共1

做了个简单的聊天的,,,,,死活不进行数据交换,,,,求解

只看楼主收藏回复

import java.io.*;
import java.net.*;
import java.util.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentListener;
import java.awt.event.ContainerListener;
import javax.swing.*;
public class ChatOne extends JFrame{
private JTextField client=new JTextField();
private JTextArea server=new JTextArea();
private DataInputStream fromclient;
private DataOutputStream toclient;
public ChatOne(){ setLayout(new GridLayout(2,2));
client.addActionListener(new Listener());
server.append("聊天记录:"+'\n');
JPanel p1=new JPanel(new BorderLayout());
JPanel p2=new JPanel(new BorderLayout());
p1.add(new Label("聊天内容"),BorderLayout.NORTH);
p1.add(server,BorderLayout.CENTER);
p2.add(client,BorderLayout.CENTER);
p2.add(new Label("Client"),BorderLayout.NORTH);
p1.add(new JScrollPane(server));
p2.add(new JScrollPane(client));
add(p1); add(p2); setSize(400,350);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
try{
ServerSocket ss=new ServerSocket(8040);
Socket s=ss.accept();
fromclient =new DataInputStream (s.getInputStream());
toclient=new DataOutputStream (s.getOutputStream());
//前面四行是建立起连接
//读取从客户端的数据
while(true){
byte b[] = new byte[1024] ;
// 数组大小由文件决定
int len = 0 ;
int temp = 0 ;
// 接收每一个读取进来的数据
while((temp=fromclient.read())!=-1){
// 表示还有内容,文件没有读完
b[len] = (byte)temp ; len++ ;
}
server.append("client2 say: "+b.toString()+'\n');
}
}
catch(IOException ex){
ex.printStackTrace();
}
}
private class Listener implements ActionListener{//当点击回车键时产生的事件监听
public void actionPerformed(ActionEvent e) {
String s=client.getText().trim();
try {
byte[] b=s.getBytes(); toclient.write(b);//将输入的内容发送至client
toclient.flush(); }
catch (IOException e1) {
e1.printStackTrace();
} server.append("client1 say: "+s+'\n');//在聊天记录中显示出来 client.setText(null);
}
}
public static void main(String args[]){
new ChatOne();
}
}



1楼2012-09-23 19:22回复
    import java.io.*;
    import java.net.*;
    import java.util.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.ComponentListener;
    import java.awt.event.ContainerListener;
    import javax.swing.*;
    public class ChatTwo extends JFrame{
    private JTextField client=new JTextField();
    private JTextArea server=new JTextArea();
    private DataInputStream fromclient;
    private DataOutputStream toclient;
    public ChatTwo(){
    setLayout(new GridLayout(2,2));
    server.setEditable(false);
    client.setEditable(true);
    server.setLineWrap(true);
    client.addActionListener(new Listener());
    server.append("聊天记录:"+'\n');
    JPanel p1=new JPanel(new BorderLayout());
    JPanel p2=new JPanel(new BorderLayout());
    p1.add(new Label("聊天内容"),BorderLayout.NORTH);
    p1.add(server,BorderLayout.CENTER);
    p2.add(client,BorderLayout.CENTER);
    p2.add(new Label("Client"),BorderLayout.NORTH);
    p1.add(new JScrollPane(server));
    p2.add(new JScrollPane(client));
    add(p1);
    add(p2);
    setSize(400,350);
    setVisible(true);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    try{
    Socket sk=new Socket("localhost",8040);//连接服务器
    fromclient =new DataInputStream (sk.getInputStream());
    toclient=new DataOutputStream(sk.getOutputStream());
    while(true){
    byte b[] = new byte[1024] ; // 数组大小由文件决定
    int len = 0 ; int temp = 0 ; // 接收每一个读取进来的数据
    while((temp=fromclient.read())!=-1){ // 表示还有内容,文件没有读完
    b[len] = (byte)temp ;
    len++ ;
    }
    server.append("client2 say: "+b.toString()+'\n');
    }
    }catch(IOException ex){
    ex.printStackTrace();
    }
    }
    private class Listener implements ActionListener{
    public void actionPerformed(ActionEvent e) {
    String s=client.getText().trim();
    try {
    byte[] b=s.getBytes();
    toclient.write(b);
    toclient.flush();
    } catch (IOException e1) { // TODO Auto-generated catch block
    e1.printStackTrace();
    }
    server.append("client2 say: "+s+'\n');
    client.setText(null);
    }
    } public static void main(String args[]){
    new ChatTwo();
    }
    }
    


    2楼2012-09-23 19:25
    回复


      IP属地:江苏3楼2012-09-23 19:26
      收起回复
        各位大神 帮忙看看 好像主要问题就出在输入输出那块


        4楼2012-09-23 19:26
        回复
          帮忙看看


          5楼2012-09-23 19:58
          回复


            6楼2012-09-23 19:58
            回复


              7楼2012-09-23 19:58
              回复
                看不懂。


                IP属地:江苏8楼2012-09-23 20:09
                收起回复
                  读取 流会造成堵塞, 可以新开一个 service 线程进行处理


                  9楼2012-09-23 21:06
                  收起回复