//服务器端代码
package com.leo.chatProject;
import java.io.*;
import java.net.*;
import java.util.*;
import java.awt.*;import javax.swing.*;
public class ChatServer extends JFrame{
private JTextArea jta=new JTextArea();
//private ArrayList<Socket>  socketArray=new ArrayList<Socket>();

public static void main(String[] args) {
new ChatServer();
}

public ChatServer(){
setLayout(new BorderLayout());
add(new JScrollPane(jta),BorderLayout.CENTER);
setTitle("ChatServer");
setSize(500,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
try{
ServerSocket serverSocket=new ServerSocket(8000);
while(true){
Socket socket=serverSocket.accept();
//socketArray.add(socket);
//jta.append(socketArray.size()+"Connections");
HandleAClient task=new HandleAClient(socket);
new Thread(task).start();
}
}catch(IOException ex){
System.err.println(ex);
}
}
class HandleAClient implements Runnable{
Socket socket;
public HandleAClient(Socket socket){
this.socket=socket;
}
@Override
public void run() {
// TODO Auto-generated method stub
try{
BufferedReader inputFromClient1 = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
PrintWriter outputToClient1=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())));       
String line=null;
while((line=inputFromClient1.readLine())!=null)
jta.append(line);         
outputToClient1.println();
outputToClient1.flush();
}catch(IOException e){
System.err.println(e);
}
}

}
}//客户端代码
package com.leo.chatProject;
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ChatClient1 extends JFrame{
private JTextField jtf=new JTextField();
private JTextArea jta=new JTextArea();
private PrintWriter toServer;
private BufferedReader fromServer;
//private DataOutputStream toServer;
public static void main(String[] args) {
new ChatClient1();
}
public ChatClient1(){
JPanel p=new JPanel();
p.setLayout(new BorderLayout());
p.add(new JLabel("Enter radius"),BorderLayout.WEST);
p.add(jtf,BorderLayout.CENTER);
jtf.setHorizontalAlignment(JTextField.RIGHT);
setLayout(new BorderLayout());
add(p,BorderLayout.NORTH);
add(new JScrollPane(jta),BorderLayout.CENTER);
jtf.addActionListener(new TextFieldListener());

setTitle("Client1");
setSize(500,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
try{
Socket socket=new Socket("192.168.1.3",8000);
fromServer=new BufferedReader(new InputStreamReader(socket.getInputStream()));
toServer=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())));
}catch(IOException ex){
jta.append(ex.toString()+'\n');
}
}
private class TextFieldListener implements ActionListener{
public void actionPerformed(ActionEvent e){
String str1=jtf.getText();
String line=null;
try {
while((line=fromServer.readLine())!=null){
jta.append(line);
}
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//jta.append(fromServer.readLine());
jta.append(str1);
toServer.println(str1);
toServer.flush();
}
}
}socketiostring

解决方案 »

  1.   

    我的问题是当我注释掉客户端
    while((line=fromServer.readLine())!=null){                         jta.append(line);                     } 的代码后程序是可以正常运行的,但我看不出我在客户端加的这个代码有任何问题
      

  2.   

    补充,服务端和客户端关于socket的io放面的写法不一样吗?还是其他什么方面的原因,我只是想让客户端和服务器实现字符串的交互。