//服务器部分
class Watch extends Thread
{
Index index;
Frame1 f;
Client c;
Watch(Frame1 f,Index index)
{
this.index=index;
this.f=f;
} public void run()
{
 try
{
index.socket=index.ss.accept();//程序好象只运行到这里
}
catch(IOException e)
{
f.l1.add(String.valueOf(e.getMessage()));
}
f.l1.add("有新客户连接");//为什么老是不执行这行,与客户连接成功就应该执行啊...
Client c=new Client(index.socket, this.f);
c.start();
while(true)
{
   
       while(index.socket!=null);
     try
    {
         Thread.sleep(400);
    }
    catch(Exception e)
   {}
       }
         }
}//客户端部分try
{
socket=new Socket("172.18.100.76",4567);

if(socket!=null)
{
f.l.add("connect success");
ps=new PrintStream(socket.getOutputStream());
StringBuffer info=new StringBuffer("fffffffff");
ps.print(info);
ps.flush();
Thread c=new Client(socket,f);
c.start();


}
}

解决方案 »

  1.   

    乱七八遭
    好好google一下socket编程的src看看
      

  2.   

    index.socket=index.ss.accept();发生阻塞了, 因为你的程序是window程序吧,比如你在服务器端想点击一个按钮来启动socket监听,这个时候就会发生阻塞,解决该种类型的阻塞的方法就是,在你点击一个按钮的时候开辟一个新的线程来进入run()方法以启动socket监听。你不妨试一下。
      

  3.   

    谢谢前辈门提的意见啊,这是我在CSDN的第一贴..谢谢你们.
      

  4.   

    .........还是不行啊...麻烦哪个前辈帮我看看啊。..
    //----------Frame1.java-----------以下为服务器端
    import java.awt.Button;
    import java.awt.Frame;
    import java.awt.GridLayout;
    import java.awt.Label;
    import java.awt.List;
    import java.awt.Panel;
    import java.awt.TextField;
    import java.awt.event.*;
    import java.io.DataInputStream;
    import java.io.PrintStream;
    import java.util.Vector;
    class Frame1  implements ActionListener
    {
    Label clientip;
    Label clientname;
    Label chatnote;
    List l1;
    List l2;
    Vector client;
    Vector chat;
    TextField send;
    Button refer;
    Frame f;
    Client c; DataInputStream dis;
    PrintStream ps;
    public void connect(DataInputStream dis,PrintStream ps)
    {
    this.ps=ps;
    this.dis=dis;
    }
    public void  display()
    {

    f=new Frame("简易聊天程序服务端");
    clientip=new Label("IP");
    clientname=new Label("名字");
    chatnote=new Label("聊天记录",1);
    l1=new List();
    l2=new List();
    client=new Vector(4);
    chat=new Vector(10);
    send=new TextField(30);
    refer=new Button("发送:");

    f.setLayout(new GridLayout(5,1));
    Panel p1,p2;
    p1=new Panel();
    p2=new Panel();
    p1.add(clientip);
    p1.add(clientname);
    p2.add(send);
    p2.add(refer);
    f.add(p1);
    f.add(l1);
    f.add(chatnote);
    f.add(l2);
    f.add(p2);
    refer.addActionListener((ActionListener) this);
    f.setLocation(310,180);
    //f.setSize(563,456);
    f.pack();
    f.addWindowListener(new Wind());
    f.show();
    }
    public void actionPerformed(ActionEvent e)
    {
    if(e.getSource()==refer)
    {
    try
    { //dis=new DataInputStream(getInputStream());
    //ps=new PrintStream(getOutputStream());
    ps.print(send.getText());
    l2.add(String.valueOf(send.getText()));
    send.setText("");
    }
    catch(Exception ex)
    {

    l2.add("yicahng");
    send.setText(ex.getMessage());
    }
    }
    }
    }class Wind extends WindowAdapter
    {
    public void windowClosing(WindowEvent e)
    {
    System.exit(0);
    }
    }
    //-------------Client.java---------
    import java.net.Socket;
    import java.io.*;
    class Client extends Thread
    {
    Socket socket;
    Frame1 f;
    String getstr;
    String ip;
    DataInputStream dis;
    PrintStream ps;
    public Client(Socket socket,Frame1 f)
    {
    this.socket=socket;
    this.f=f;
    try
    {
    dis=new DataInputStream(socket.getInputStream());
    ps=new PrintStream(socket.getOutputStream());
    String info=dis.readLine();
    f.l2.add(info);
    f.connect(dis,ps);
    }
    catch(Exception e)
    {
    //f.l2.add(String.valueOf(e.getMessage()));
    }
    }
    public void run()
    {
    while(true)
    {
    String line=null;
    try
    {
    line=dis.readLine();
    f.l2.add(line);
    }
    catch(Exception ex)
    {
    //f.l2.add(String.valueOf(ex.getMessage()));
    }
    try
    {
    Thread.sleep(400);
    }
    catch(Exception ex)
    {

    }
    }
    }
    }
    //---------------Watch.java-----------class Watch extends Thread
    {
    Index index;
    Frame1 f;
    Client c;
    int i;
    Watch(Frame1 f,Index index)
    {
    this.index=index;
    this.f=f;
    index.socket=null;
    i=0;
    }
    public void run()
    {
       try
    {
    while(i<10)
    {
        try
        {
    index.socket=index.ss.accept();//这里有错误..
    i++;
        }
    catch(Exception e)
    {
    //f.l1.add(String.valueOf(e.getMessage()));
    }
    Client c=new Client(index.socket, this.f);//为每一个连接的的用户分一个线程
    c.start();
    try
    {
    Thread.sleep(400);
    }
    catch(Exception ex)
    {}
    }
    }
    catch(Exception e)
    {
    }
     

    }
    }
    //-------------------Index.java------------
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.io.*;
    public class Index
    {
    ServerSocket ss;
    Socket socket;
    Watch watch;
    String str;
    public static void main(String arg[])
    {
    Frame1 f=new Frame1();//构造框架
    Index index=new Index();
    try
    {
    f.display();//显示框架
    }
    catch(Exception ex)
    {
    System.out.println(ex.getMessage());
    }

    try
    {
    ServerSocket ss=new ServerSocket(4567);
    f.l2.add("开始启动....");
    }
    catch(Exception e)
    {
    }
    Watch watch=new Watch(f,index);
    watch.start();//启动等待客户请求的线程
    f.l2.add("已经启动");
    f.l2.add("正在等待客户的连接");
    }
    }
    //--------------Frame1.java------以下为客户端
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.List;
    import java.io.DataInputStream;
    import java.io.PrintStream;
    import java.util.*;public class Frame1 implements ActionListener
    {
    index i;
    Frame f;
    Label ip,username;
    Button connect,sent;
    List l;
    Vector v;
    TextField textip,textusername,word;
    DataInputStream dis;
    PrintStream ps;
    public void conn(DataInputStream dis,PrintStream ps)
    {
    this.dis=dis;
    this.ps=ps;
    }
    public void display()
    {
    f=new Frame("简易聊天程序客户端");
    Panel p1,p2;
    ip=new Label("服务器端IP");
    username=new Label("用户名");
    connect=new Button("连接");
    //connect.addActionlistener(this);
    sent=new Button("发送");
    sent.addActionListener(this);
    l=new List();
    textip=new TextField(20);
    textusername=new TextField();
    word=new TextField();
    p1=new Panel();
    p2=new Panel();
    p1.setLayout(new GridLayout(2,3));
    p1.add(ip);
    p1.add(textip);
    p1.add(new Label());
    p1.add(username);
    p1.add(textusername);
    p1.add(connect);
    p2.setLayout(new GridLayout(1,2));
    p2.add(word);

    f.setLayout(new GridLayout(4,1));
    f.add(p1);
    f.add(l);
    //f.setSize(563,456);
    f.setLocation(356,150);
    f.add(p2);
    f.add(sent);
    f.pack();
    f.addWindowListener(new Wind());
    f.show();
    }
    public void actionPerformed(ActionEvent e)
    {
    if(e.getSource()==sent)
    {
    try
    { ps.print(String.valueOf(word.getText()));
    l.add(String.valueOf(word.getText()));
    word.setText("");
    }
    catch(Exception ex)
    {
    l.add(ex.getMessage());
    }
    }

    }

    }
    class Wind extends WindowAdapter
    {
    public void windowClosing(WindowEvent e)
    {
    System.exit(0);
    }
    }
    //----------------Client.java--------
    import java.net.Socket;
    import java.io.*;
    class Client extends Thread
    {
    Socket socket;
    Frame1 f;
    String getstr;
    String ip;
    DataInputStream dis;
    PrintStream ps;
    public Client(Socket socket,Frame1 f)
    {
    this.socket=socket;
    this.f=f;
    try
    {
    dis=new DataInputStream(socket.getInputStream());
    ps=new PrintStream(socket.getOutputStream());
    f.conn(dis, ps);
    String info=dis.readLine();
    f.l.add(info);


    }
    catch(Exception e)
    {
    f.l.add(String.valueOf(e.getMessage()));
    }
    }
    public void run()
    {
    while(true)
    {
    String line=null;
    try
    {
    line=dis.readLine();
    f.l.add(line);
    }
    catch(Exception ex)
    {
    //f.l.add(String.valueOf(ex.getMessage()));
    }
    try
    {
    Thread.sleep(400);
    }
    catch(Exception e)
    {

    }
    }

    }
    }
    //------------------Index.java------------import java.net.*;
    import java.io.*;
    public class index 
    {
    public static void main(String arg[])
    {
    Frame1 f=new Frame1();
    f.display();
    Socket socket=null;
    int m=0;
    PrintStream ps;
    DataInputStream dis;
    while(socket==null)
    {
    try
    {
    socket=new Socket("localhost",4567);
    if(socket!=null)
    {
    f.l.add("connect success");
    ps=new PrintStream(socket.getOutputStream());
    StringBuffer info=new StringBuffer("fffffffffffffffffff");
    ps.print(info);
    ps.flush();
    Thread c=new Client(socket,f);
    c.start();
    }
    else
    f.l.add("connect fial");
    }
    catch(Exception e)
    {
    f.l.add(e.getMessage());
    }
    try{
    Thread.sleep(100);
    }
    catch(Exception e)
    {}
    }

    }
    }
      

  5.   

    chatprogram文件内是服务端、
         主函数在Index.java里
         Frame.java 的对象是框架
         Watch .java里循环等待客户发来的请求
         client.java是 收发数据的chatprogram_client是客户端
         和chatprogram 一样