accept()接到请求后为什么不执行下面的

cqupt_feng 2007-05-27 07:22:17
//服务器部分
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();


}
}
...全文
220 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cqupt_feng 2007-05-28
  • 打赏
  • 举报
回复
chatprogram文件内是服务端、
主函数在Index.java里
Frame.java 的对象是框架
Watch .java里循环等待客户发来的请求
client.java是 收发数据的

chatprogram_client是客户端
和chatprogram 一样
cqupt_feng 2007-05-28
  • 打赏
  • 举报
回复
.........还是不行啊...麻烦哪个前辈帮我看看啊。..
//----------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)
{}
}

}
}
xiaosun2 2007-05-28
  • 打赏
  • 举报
回复
index.socket=index.ss.accept();发生阻塞了, 因为你的程序是window程序吧,比如你在服务器端想点击一个按钮来启动socket监听,这个时候就会发生阻塞,解决该种类型的阻塞的方法就是,在你点击一个按钮的时候开辟一个新的线程来进入run()方法以启动socket监听。你不妨试一下。
wssssw 2007-05-28
  • 打赏
  • 举报
回复
还真是需要好好看看书啊
要把服务器代码和客户端代码放在不同的进程,至少是不同的线程
cqupt_feng 2007-05-28
  • 打赏
  • 举报
回复
谢谢前辈门提的意见啊,这是我在CSDN的第一贴..谢谢你们.
sdfdfasg 2007-05-27
  • 打赏
  • 举报
回复
乱七八遭
好好google一下socket编程的src看看

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧