----------------------服务端SocketS.java----------------------------------
import javax.swing.*;
import java.awt.*;
import java.io.*;
import java.net.*;
class SocketS { private JFrame jFrame = null;  //  @jve:decl-index=0:visual-constraint="147,33"
private JPanel jContentPane = null;
private JPanel jPanel = null;
private Panel panel = null;
private JButton jButton = null;
private JButton jButton1 = null;
private JButton jButton2 = null;
static JLabel jLabel = null;
Object s1=new Object();
private JPanel jPanel1 = null;
static JTextArea jTextArea = null;
private JButton jButton3 = null;
ServerThread send;
public static BufferedReader sin;
public static PrintWriter sout;
private JFrame getJFrame() {
if (jFrame == null) {
jFrame = new JFrame();
jFrame.setSize(new java.awt.Dimension(330,314));
jFrame.setTitle("服务端");
jFrame.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
jFrame.setBackground(new java.awt.Color(238,238,238));
jFrame.setResizable(false);
jFrame.setContentPane(getJContentPane());
jFrame.setVisible(true);
jFrame.addWindowListener(new java.awt.event.WindowAdapter() {   
public void windowOpened(java.awt.event.WindowEvent e) {    

}
public void windowClosing(java.awt.event.WindowEvent e) {
System.exit(0);
}
});
}
return jFrame;
} private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
jContentPane.setPreferredSize(new java.awt.Dimension(20,20));
jContentPane.setBackground(new java.awt.Color(119,2,2));
jContentPane.add(getPanel(), java.awt.BorderLayout.NORTH);
jContentPane.add(getJPanel(), java.awt.BorderLayout.CENTER);
jContentPane.add(getJPanel1(), java.awt.BorderLayout.SOUTH);
}
return jContentPane;
} private JPanel getJPanel() {
if (jPanel == null) {
jLabel = new JLabel();
jLabel.setText("");
jLabel.setPreferredSize(new java.awt.Dimension(320,180));
jLabel.setComponentOrientation(java.awt.ComponentOrientation.LEFT_TO_RIGHT);
jLabel.setForeground(java.awt.Color.cyan);
jLabel.setVerticalAlignment(javax.swing.SwingConstants.TOP);
jLabel.setAlignmentY(0.0F);
jLabel.setRequestFocusEnabled(false);
jLabel.setVerticalTextPosition(javax.swing.SwingConstants.TOP);
jLabel.setBackground(new java.awt.Color(153,51,0));
jPanel = new JPanel();
jPanel.setComponentOrientation(java.awt.ComponentOrientation.LEFT_TO_RIGHT);
jPanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(0,0,0,0));
jPanel.setBackground(new java.awt.Color(153,51,0));
jPanel.setPreferredSize(new java.awt.Dimension(320,180));
jPanel.add(jLabel, null);
jLabel.setAutoscrolls(true);
jLabel.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
jLabel.setBackground(new Color(255,255,255));
}
return jPanel;
} private Panel getPanel() {
if (panel == null) {
panel = new Panel();
panel.setPreferredSize(new java.awt.Dimension(10,36));
panel.setComponentOrientation(java.awt.ComponentOrientation.LEFT_TO_RIGHT);
panel.setBackground(new java.awt.Color(153,51,0));
panel.add(getJButton(), null);
panel.add(getJButton1(), null);
panel.add(getJButton2(), null);
}
return panel;
} private JButton getJButton() {
if (jButton == null) {
jButton = new JButton();
jButton.setText("启动");
jButton.setToolTipText("启动服务");
jButton.setSelected(false);
jButton.setAlignmentY(0.2F);
jButton.setMargin(new java.awt.Insets(2,10,2,10));
jButton.addActionListener(new java.awt.event.ActionListener() 
{
public void actionPerformed(java.awt.event.ActionEvent e) 
{
send=new ServerThread();
send.start();
try
{
 sin=new BufferedReader(new InputStreamReader(ServerThread.socket.getInputStream()));
 sout=new PrintWriter(ServerThread.socket.getOutputStream());
}catch(Exception e1){}
}
}
);
}
return jButton;
} private JButton getJButton1() {
if (jButton1 == null) 
{
jButton1 = new JButton();
jButton1.setText("停止");
jButton1.setMargin(new java.awt.Insets(2,10,2,10));
jButton1.setVisible(true);
jButton1.addActionListener(new java.awt.event.ActionListener() {   
public void actionPerformed(java.awt.event.ActionEvent e) {    
send.stop();
}

});
}
return jButton1;
} private JButton getJButton2() {
if (jButton2 == null) {
jButton2 = new JButton();
jButton2.setText("关闭");
jButton2.setPreferredSize(new java.awt.Dimension(60,28));
jButton2.setMargin(new java.awt.Insets(2,2,2,2));
jButton2.setAlignmentY(0.2F);
jButton2.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
//jButton2.addActionListener()
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
System.exit(0);
}
});
}
return jButton2;
}
private JPanel getJPanel1() {
if (jPanel1 == null) {
jPanel1 = new JPanel();
jPanel1.setPreferredSize(new java.awt.Dimension(250,60));
jPanel1.setBackground(new java.awt.Color(153,51,0));
jPanel1.add(getJTextArea(), null);
jPanel1.add(getJButton3(), null);
}
return jPanel1;
}
private JTextArea getJTextArea() {
if (jTextArea == null) {
jTextArea = new JTextArea();
jTextArea.setPreferredSize(new java.awt.Dimension(258,50));
jTextArea.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
}
return jTextArea;
}
private JButton getJButton3() {
if (jButton3 == null) {
jButton3 = new JButton();
jButton3.setPreferredSize(new java.awt.Dimension(50,50));
jButton3.setMargin(new java.awt.Insets(2,2,2,2));
jButton3.setFont(new java.awt.Font("Dialog", java.awt.Font.BOLD, 14));
jButton3.setText("发送");
jButton3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e)
{
Email ss=new Email();
ss.start();
}
});
}
return jButton3;
}public static void main(String args[])
{
SocketS s1=new SocketS();
s1.getJFrame();
}
}
class ServerThread extends Thread
{    static ServerSocket server=null;
static Socket socket=null;
int count;
public void run()
{
if(server==null&&socket==null)
{
try
{
server=new ServerSocket(2006);
try
{
socket=server.accept();
}catch(Exception e1){System.out.print("asdsad");}
}catch(Exception e1){System.out.println("Error."+e1);}
}
}
}
class Email extends Thread
{
BufferedReader mein;
public void run() 
{
String line;
try
{
String sss=new String(SocketS.jTextArea.getText());
InputStream stm=new ByteArrayInputStream(sss.getBytes());
mein=new BufferedReader(new InputStreamReader(stm));
line=mein.readLine();
while(!line.equals("exit"))
{
SocketS.jLabel.setText("\n\r"+SocketS.jLabel.getText()+"\r\n"+"服务端:"+line+"\n\r");
SocketS.jTextArea.setText("");
SocketS.jLabel.setText(SocketS.jLabel.getText()+"客户端:"+SocketS.sin.readLine()+"\n");
SocketS.sout.print(line);
SocketS.sout.flush();
line=mein.readLine();
}

}catch(Exception e1){System.out.print(e1);}

}
}客户端程序看下一楼

解决方案 »

  1.   


    ---------------------------客户端SocketL.java----------------------------
    import javax.swing.*;
    import java.awt.*;
    import java.io.*;
    import java.net.*;
    public class SocketL { private JFrame jFrame = null;  //  @jve:decl-index=0:visual-constraint="110,24"
    private Panel panel = null;
    private Label label = null;
    private TextField textField = null;
    private Label label1 = null;
    private TextField textField1 = null;
    private JButton jButton = null;
    Object l1=new Object();
    static JLabel jLabel = null;
    static JTextArea jTextArea = null;
    private JButton jButton1 = null;
    static BufferedReader sin;
    static PrintWriter sout;
    String hostip=null;
    int port=0;
    String message=null;
    private JFrame getJFrame() {
    if (jFrame == null) {
    jFrame = new JFrame("登陆");
    jFrame.setSize(new java.awt.Dimension(371,332));
    jFrame.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
    jFrame.setComponentOrientation(java.awt.ComponentOrientation.LEFT_TO_RIGHT);
    jFrame.setResizable(false);
    jFrame.setTitle("客户端");
    jFrame.setContentPane(getPanel());
    jFrame.setVisible(true);
    jFrame.addWindowListener(new java.awt.event.WindowAdapter() {   
    public void windowOpened(java.awt.event.WindowEvent e) {    
    }
    public void windowClosing(java.awt.event.WindowEvent e) {
    System.exit(0);
    }
    });
    }
    return jFrame;
    }
    private Panel getPanel() {
    if (panel == null) {
    jLabel = new JLabel();
    jLabel.setText("");
    jLabel.setAlignmentY(0.0F);
    jLabel.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
    jLabel.setAutoscrolls(true);
    jLabel.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
    jLabel.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);
    jLabel.setComponentOrientation(java.awt.ComponentOrientation.LEFT_TO_RIGHT);
    jLabel.setVerticalTextPosition(javax.swing.SwingConstants.TOP);
    jLabel.setVerticalAlignment(javax.swing.SwingConstants.TOP);
    jLabel.setPreferredSize(new java.awt.Dimension(360,200));
    label1 = new Label();
    label1.setText("端口:");
    label1.setAlignment(java.awt.Label.CENTER);
    label = new Label();
    label.setText("服务器:");
    label.setAlignment(java.awt.Label.CENTER);
    label.setMinimumSize(new java.awt.Dimension(50,23));
    panel = new Panel();
    panel.setMinimumSize(new java.awt.Dimension(10,10));
    panel.setComponentOrientation(java.awt.ComponentOrientation.LEFT_TO_RIGHT);
    panel.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
    panel.add(label, null);
    panel.add(getTextField(), null);
    panel.add(label1, null);
    panel.add(getTextField1(), null);
    panel.add(getJButton(), null);
    panel.setBackground(java.awt.Color.orange);
    panel.add(jLabel, null);
    panel.add(getJTextArea(), null);
    panel.add(getJButton1(), null);
    }
    return panel;
    }
    private TextField getTextField() {
    if (textField == null) {
    textField = new TextField();
    textField.setMinimumSize(new java.awt.Dimension(120,23));
    textField.setFont(new java.awt.Font("Dialog", java.awt.Font.PLAIN, 14));
    textField.setText("127.0.0.1");
    textField.setPreferredSize(new java.awt.Dimension(120,23));
    }
    return textField;
    }
    private TextField getTextField1() {
    if (textField1 == null) {
    textField1 = new TextField();
    textField1.setPreferredSize(new java.awt.Dimension(50,23));
    textField1.setText("2006");
    textField1.setFont(new java.awt.Font("Dialog", java.awt.Font.PLAIN, 14));
    }
    return textField1;
    }
    private JButton getJButton() {
    if (jButton == null) {
    jButton = new JButton();
    jButton.setMargin(new java.awt.Insets(2,4,2,4));
    jButton.setText("连接");
    jButton.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent e)
    {
    hostip=textField.getText();
    port=Integer.parseInt(textField1.getText());
    try
    {
    jLabel.setText("客户端:申请连接..."+"\n");
    Socket socket=new Socket(hostip,port);
    sin=new BufferedReader(new InputStreamReader(socket.getInputStream()));
    sout=new PrintWriter(socket.getOutputStream());
    }catch(Exception e1){System.out.print("Error."+e1);}
    jLabel.setText(jLabel.getText()+"\n"+"客户端:连接成功"+"\n");
    }
    });
    }
    return jButton;
    }
    private JTextArea getJTextArea() {
    if (jTextArea == null) {
    jTextArea = new JTextArea();
    jTextArea.setPreferredSize(new java.awt.Dimension(300,50));
    jTextArea.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
    }
    return jTextArea;
    }
    private JButton getJButton1() {
    if (jButton1 == null) {
    jButton1 = new JButton();
    jButton1.setText("发送");
    jButton1.setPreferredSize(new java.awt.Dimension(50,50));
    jButton1.setFont(new java.awt.Font("Dialog", java.awt.Font.BOLD, 14));
    jButton1.setMargin(new java.awt.Insets(2,2,2,2));
    jButton1.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent e) 
    {
    Sed ll=new Sed();
    ll.start();
    }
    });
    }
    return jButton1;
    }
    public static void main(String args[])
    {
    SocketL l1=new SocketL();
    l1.getJFrame();
    }}
    class Sed extends Thread
    {
    public static StringBuffer sss;
    BufferedReader mein;
    public void run() 
    {
    String line;
    try
    {
    String sss=new String(SocketL.jTextArea.getText());
    InputStream srm=new ByteArrayInputStream(sss.getBytes());
    mein=new BufferedReader(new InputStreamReader(srm));
    line=mein.readLine();
    while(!line.equals("exit"))
    {
    SocketL.jLabel.setText(SocketL.jLabel.getText()+"客户端:"+line+"\n");
    SocketL.jTextArea.setText("");
    SocketL.jLabel.setText(SocketL.jLabel.getText()+"\n"+"服务端:"+SocketL.sin.readLine()+"\n");
    SocketL.sout.print(line);
    SocketL.sout.flush();
    line=mein.readLine();
    }

    }catch(Exception e1){System.out.print(e1);}
    }
    }
    从一端发送过来的数据,另一端总是收不到,急求大家帮忙啊~~
      

  2.   

    太多了.检查一下同步,检查一下端口.另外,catch(Exception e){System.out.print("这里面尽量详细些,把具体的socket错误写出来");},你就容易找到你错在哪儿了.
      

  3.   

    发送的一端有,发送的一端不需要经过流的转换啊,关键就是不知道socket六的问题出在哪了,郁闷中....
      

  4.   

    jButton.addActionListener(new java.awt.event.ActionListener()
    {
    public void actionPerformed(java.awt.event.ActionEvent e)
    {
    send=new ServerThread();
    send.start();
    try
    {
    sin=new BufferedReader(new InputStreamReader(ServerThread.socket.getInputStream()));
    sout=new PrintWriter(ServerThread.socket.getOutputStream());
    }catch(Exception e1){}
    }
    }
    );
    }
    return jButton;
    }
    注意这里的catch(Exception e1), 估计没错的话,ServerThread.socket.getInputStream()会失败,send.start();后,马上就会执行ServerThread.socket.getInputStream()这一句,这个时候ServerThread.socket还没得到一个Client的socket
      

  5.   

    try
    {
    server=new ServerSocket(2006);
    try
    {
    socket=server.accept();
    }catch(Exception e1){System.out.print("asdsad");}
    }catch(Exception e1){System.out.println("Error."+e1);}}
    这里应该不对吧,你的服务器端一直在监听,并没有对连接的客户端作什么吧
      

  6.   

    SocketS.jLabel.setText(SocketS.jLabel.getText() + "客户端:" + SocketS.sin.readLine() + "\n");发生空指针异常了。