- 现金
- 14 元
- 精华
- 0
- 帖子
- 2
- 注册时间
- 2009-3-13
- 最后登录
- 2009-3-16
|
劳烦各位大虾帮我看看:
package server;
//server端的程序如下:
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
public class MySocketServer //Java Application主类
{
public static void main(String args[])
{
// ServerService MyServer=
new ServerService(8000,10);//建立监听服务
}
}
class ServiceThread extends Frame implements Runnable
{ //当有Client请求时,Server创建一个Frame用于与之交互数据
ServerService FatherListener; //创建当前通信线程的监听器对象
Socket ConnectedClient; //负责当前线程中C/S通信的Socket对象
Thread ConnectThread; //负责通信的线程
Panel ListenerPanel; //本次通信Server端的信息显示窗口
PrintWriter out;
BufferedReader in;
TextArea ServerMeg; //信息显示窗口
TextField textF;
Button MyButton;
String s,o;
public ServiceThread(ServerService sv,Socket sc) //构造函数
{
FatherListener=sv;
ConnectedClient=sc;
ConnectThread=new Thread(this);
setTitle("Answer Client"); //建立并显示Server端信息显示窗口
setLayout(new BorderLayout());
ServerMeg=new TextArea(10,50);
textF=new TextField();
MyButton=new Button("发送");
MyButton.addActionListener(new ActionListener()//内部类,用于监听MyButton
{
public void actionPerformed(ActionEvent e)
{
o=textF.getText();
try{
out.println(o);
textF.setText("");
ServerMeg.append(o);
out.flush();
}catch(Exception ex){}
}
});
add("Cneter",ServerMeg);
add("South",textF);
add("East",MyButton);
setResizable(false); //不可改变窗口大小
pack();
setVisible(true); //获得请求服务的Client端计算机的IP地址
InetAddress ClientAddress=ConnectedClient.getInetAddress();
ServerMeg.append("Client connected"+"from\n"+ClientAddress.toString()+".\n");
}
public void run() //子线程任务:与client端通信
{
try{
in=new BufferedReader( //获得从Client端读入数据流
new InputStreamReader(ConnectedClient.getInputStream()));
out=new PrintWriter(ConnectedClient.getOutputStream());//获得向Client端输出的数据流
out.println("Hello! Wellcome connect to our server!\r");
out.flush(); //向Client端输出信息
s=in.readLine(); //从Client端读入信息
while(!s.equals("Bye")) //直至Client端表示要断开结束
{
ServerMeg.append("Client 端输入的信息为:\n"+s);
s=in.readLine(); //读入Client端写入的下一行信息
}
ConnectedClient.close(); //若Client端写入"Bye"则结束通信
} //catch
catch(Exception e){}
FatherListener.addMeg("Client"+"closed."+"\n");
dispose(); //关闭当前通信Frame
} //run
/*public Thread ThreadRun()
{
ConnectThread=new Thread(this);
ConnectThread.start();
return ConnectThread;
}*/
}
class ServerService extends Frame //服务器端的监听器窗口
{
ServerSocket m_sListener; //监听器
Socket Connected;
TextArea ListenerMeg; //显示信息的监听器窗口
public ServerService(int Port,int Count)
{
try{
m_sListener=new ServerSocket(Port,Count);//建立监听服务
}catch(Exception e){System.out.println(e.toString());}
setTitle("Server Listener"); //建立监听服务的窗口并显示
this.addWindowListener(new WinAdpt());
setLayout(new BorderLayout());
ListenerMeg=new TextArea("监听服务已经启动\n",10,50);
add("Center",ListenerMeg);
setResizable(false);
pack();
setVisible(true);
while(true)
{
try{
Connected=m_sListener.accept();//接受来自Client端的请求
}catch(Exception e)
{System.out.println(e.toString());}
InetAddress ClientAddress=Connected.getInetAddress();
ListenerMeg.append("Client "+"connected "+"from:客户端"+ClientAddress.toString()+".\n");
//获得请求Client的IP并建立新的线程新的窗口与此Client通信
ServiceThread MyST=new ServiceThread(this,Connected);
MyST.ConnectThread.start(); //启动新线程
}
}
public void addMeg(String s) //在监听器窗口中加入信息
{
ListenerMeg.append(s);
}
} //ServerSevice Class
class WinAdpt extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
((Frame)e.getWindow()).dispose();
// System.exit(0);
}
}
程序可以简单运行,但当Server端监听到Socket请求时 ,却不能生成与之交互的另一个线程窗口,我用红色标记了,这段程序似乎没有运行,不知道问题出在哪,劳烦各位大虾了,感激不尽!!!
由于字数限制,线分两贴征询! |
|