急求课后习题的答案:Java程序设计教程(第2版) 雍俊海 编著 清华大学出版社 本人qq邮箱是[email protected]谢谢哥哥姐姐了, 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 服务器端的代码import java.awt.BorderLayout;import java.awt.Container;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;import java.net.ServerSocket;import java.net.Socket;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import javax.swing.JFrame;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.JScrollPane;public class J_ChatServer extends JFrame{ private ObjectInputStream m_input; private ObjectOutputStream m_output; private JTextField m_enter; private JTextArea m_display; private int m_clientNumber=0; public J_ChatServer() { super("聊天程序服务器端"); Container c=getContentPane(); m_enter=new JTextField(); m_enter.setEnabled(false); m_enter.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { try { String s=event.getActionCommand(); m_output.writeObject(s); m_output.flush(); mb_displayAppend("服务器端:"+s); m_enter.setText(""); } catch(Exception e) { System.err.println(e); e.printStackTrace(); } } } ); c.add(m_enter,BorderLayout.NORTH); m_display=new JTextArea(); c.add(new JScrollPane(m_display),BorderLayout.CENTER); } public void mb_displayAppend(String s) { m_display.append(s+"\n"); m_display.setCaretPosition(m_display.getText().length()); m_enter.requestFocusInWindow(); } public boolean mb_isEndSession(String m) { if(m.equalsIgnoreCase("q")) return (true); if(m.equalsIgnoreCase("quit")) return (true); if(m.equalsIgnoreCase("exit")) return (true); if(m.equalsIgnoreCase("end")) return (true); if(m.equalsIgnoreCase("结束")) return (true); return false; } public void mb_run() { try { ServerSocket server=new ServerSocket(5000); String m; while(true) { m_clientNumber++; mb_displayAppend("等待连接["+m_clientNumber+"]"); Socket s=server.accept(); mb_displayAppend("接收到客户端链接["+m_clientNumber+"]"); m_output=new ObjectOutputStream(s.getOutputStream()); m_input=new ObjectInputStream(s.getInputStream()); m_output.writeObject("连接成功"); m_output.flush(); m_enter.setEnabled(true); do { m=(String)m_input.readObject(); mb_displayAppend("客户端:"+m); }while(!mb_isEndSession(m)); m_output.writeObject("q"); m_output.flush(); m_enter.setEnabled(false); m_output.close(); m_input.close(); s.close(); mb_displayAppend("连接["+m_clientNumber+"]结束"); } } catch(Exception e) { System.err.println(e); e.printStackTrace(); mb_displayAppend("连接["+m_clientNumber+"]发生异常"); } } public static void main(String args[]) { J_ChatServer app =new J_ChatServer(); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); app.setSize(350,150); app.setVisible(true); app.mb_run(); }} 客户端的代码import java.awt.BorderLayout;import java.awt.Container;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;import java.net.Socket;import java.net.UnknownHostException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import javax.swing.JFrame;import javax.swing.JTextField;import javax.swing.JTextArea;import javax.swing.JScrollPane;import java.net.InetAddress;public class J_ChatClient extends JFrame{ private ObjectInputStream m_input; private ObjectOutputStream m_output; private JTextField m_enter; private JTextArea m_display; public J_ChatClient() { super("聊天程序客户端"); Container c=getContentPane(); m_enter=new JTextField(); m_enter.setEnabled(false); m_enter.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { try { String s=event.getActionCommand(); m_output.writeObject(s); m_output.flush(); mb_displayAppend("客户端:"+s); m_enter.setText(""); } catch(Exception e) { System.err.println(e); e.printStackTrace(); } } } ); c.add(m_enter,BorderLayout.NORTH); m_display=new JTextArea(); c.add(new JScrollPane(m_display),BorderLayout.CENTER); } public void mb_displayAppend(String s) { m_display.append(s+"\n"); m_display.setCaretPosition(m_display.getText().length()); m_enter.requestFocusInWindow(); } public boolean mb_isEndSession(String m) { if(m.equalsIgnoreCase("q")) return (true); if(m.equalsIgnoreCase("quit")) return (true); if(m.equalsIgnoreCase("exit")) return (true); if(m.equalsIgnoreCase("end")) return (true); if(m.equalsIgnoreCase("结束")) return (true); return false; } public void mb_run(InetAddress host,int port) { try { mb_displayAppend("尝试连接"); Socket s=new Socket (host,port);//host可以是InetAddress类型吗,好像没这个构造方法啊 String m; m_output=new ObjectOutputStream(s.getOutputStream()); m_input=new ObjectInputStream(s.getInputStream()); m_enter.setEnabled(true); do { m=(String)m_input.readObject(); mb_displayAppend("服务器端:"+m); }while(!mb_isEndSession(m)); m_output.writeObject("q"); m_output.flush(); m_output.close(); m_input.close(); s.close(); System.exit(0); } catch(Exception e) { System.err.println(e); e.printStackTrace(); mb_displayAppend("发生异常:"); } } public static void main(String args[]) throws UnknownHostException { byte[]s=new byte[]{(byte)192,(byte) 168,(byte)0,(byte)101}; /*InetAddress ts=null; try { ts=InetAddress.getByAddress(s); } catch(UnknownHostException e) { System.err.println(e); e.printStackTrace(); }*/ J_ChatClient app=new J_ChatClient(); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); app.setSize(350,150); app.setVisible(true); //if(args.length==0) app.mb_run(InetAddress.getByAddress(s), 5000); //else app.mb_run(args[0], 5000); }} 我这个课本的tcp程序只能实现简单的服务器与客户端通信。。第五题是:把这个程序改成多线程的可以实现多个客户端与服务器聊天的功能。第六题是:把这个程序改成udp协议下的程序,实现同样的功能。 这句话是什么意思? 菜鸟来了请高手帮帮我 回来重打java基础,可是浮躁的心情挥之不去,散分! html问题 tomact配制问题????? 简单问题,请帮忙???????/ java 多线程实例测试不通过,请大牛指教 这个问题我已经搞了一个多月了,头都昏了,希望大侠救救小弟吧!!!! 给出学者推荐基本好的JAVA书籍 朋友们,帮个忙!!import com.borland.jbcl.layout.*;这条语句怎么才不会编译出错。 小模拟服务器和客户端,出现了很奇怪的问题!谁知道··· Java初学者 求教 在做一个小游戏时 如何加入音乐?
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JScrollPane;public class J_ChatServer extends JFrame
{
private ObjectInputStream m_input;
private ObjectOutputStream m_output;
private JTextField m_enter;
private JTextArea m_display;
private int m_clientNumber=0;
public J_ChatServer()
{
super("聊天程序服务器端");
Container c=getContentPane();
m_enter=new JTextField();
m_enter.setEnabled(false);
m_enter.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
try
{
String s=event.getActionCommand();
m_output.writeObject(s);
m_output.flush();
mb_displayAppend("服务器端:"+s);
m_enter.setText("");
}
catch(Exception e)
{
System.err.println(e);
e.printStackTrace();
}
}
}
);
c.add(m_enter,BorderLayout.NORTH);
m_display=new JTextArea();
c.add(new JScrollPane(m_display),BorderLayout.CENTER);
}
public void mb_displayAppend(String s)
{
m_display.append(s+"\n");
m_display.setCaretPosition(m_display.getText().length());
m_enter.requestFocusInWindow();
}
public boolean mb_isEndSession(String m)
{
if(m.equalsIgnoreCase("q"))
return (true);
if(m.equalsIgnoreCase("quit"))
return (true);
if(m.equalsIgnoreCase("exit"))
return (true);
if(m.equalsIgnoreCase("end"))
return (true);
if(m.equalsIgnoreCase("结束"))
return (true);
return false;
}
public void mb_run()
{
try
{
ServerSocket server=new ServerSocket(5000);
String m;
while(true)
{
m_clientNumber++;
mb_displayAppend("等待连接["+m_clientNumber+"]");
Socket s=server.accept();
mb_displayAppend("接收到客户端链接["+m_clientNumber+"]");
m_output=new ObjectOutputStream(s.getOutputStream());
m_input=new ObjectInputStream(s.getInputStream());
m_output.writeObject("连接成功");
m_output.flush();
m_enter.setEnabled(true);
do
{
m=(String)m_input.readObject();
mb_displayAppend("客户端:"+m);
}while(!mb_isEndSession(m));
m_output.writeObject("q");
m_output.flush();
m_enter.setEnabled(false);
m_output.close();
m_input.close();
s.close();
mb_displayAppend("连接["+m_clientNumber+"]结束");
}
}
catch(Exception e)
{
System.err.println(e);
e.printStackTrace();
mb_displayAppend("连接["+m_clientNumber+"]发生异常");
}
}
public static void main(String args[])
{
J_ChatServer app =new J_ChatServer();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.setSize(350,150);
app.setVisible(true);
app.mb_run();
}}
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.net.Socket;
import java.net.UnknownHostException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import java.net.InetAddress;
public class J_ChatClient extends JFrame
{
private ObjectInputStream m_input;
private ObjectOutputStream m_output;
private JTextField m_enter;
private JTextArea m_display;
public J_ChatClient()
{
super("聊天程序客户端");
Container c=getContentPane();
m_enter=new JTextField();
m_enter.setEnabled(false);
m_enter.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
try
{
String s=event.getActionCommand();
m_output.writeObject(s);
m_output.flush();
mb_displayAppend("客户端:"+s);
m_enter.setText("");
}
catch(Exception e)
{
System.err.println(e);
e.printStackTrace();
}
}
}
);
c.add(m_enter,BorderLayout.NORTH);
m_display=new JTextArea();
c.add(new JScrollPane(m_display),BorderLayout.CENTER);
}
public void mb_displayAppend(String s)
{
m_display.append(s+"\n");
m_display.setCaretPosition(m_display.getText().length());
m_enter.requestFocusInWindow();
}
public boolean mb_isEndSession(String m)
{
if(m.equalsIgnoreCase("q"))
return (true);
if(m.equalsIgnoreCase("quit"))
return (true);
if(m.equalsIgnoreCase("exit"))
return (true);
if(m.equalsIgnoreCase("end"))
return (true);
if(m.equalsIgnoreCase("结束"))
return (true);
return false;
}
public void mb_run(InetAddress host,int port)
{
try
{
mb_displayAppend("尝试连接");
Socket s=new Socket (host,port);//host可以是InetAddress类型吗,好像没这个构造方法啊
String m;
m_output=new ObjectOutputStream(s.getOutputStream());
m_input=new ObjectInputStream(s.getInputStream());
m_enter.setEnabled(true);
do
{
m=(String)m_input.readObject();
mb_displayAppend("服务器端:"+m);
}while(!mb_isEndSession(m));
m_output.writeObject("q");
m_output.flush();
m_output.close();
m_input.close();
s.close();
System.exit(0);
}
catch(Exception e)
{
System.err.println(e);
e.printStackTrace();
mb_displayAppend("发生异常:");
}
}
public static void main(String args[]) throws UnknownHostException
{
byte[]s=new byte[]{(byte)192,(byte) 168,(byte)0,(byte)101};
/*InetAddress ts=null;
try
{
ts=InetAddress.getByAddress(s);
}
catch(UnknownHostException e)
{
System.err.println(e);
e.printStackTrace();
}*/
J_ChatClient app=new J_ChatClient();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.setSize(350,150);
app.setVisible(true);
//if(args.length==0)
app.mb_run(InetAddress.getByAddress(s), 5000);
//else app.mb_run(args[0], 5000);
}}
第五题是:把这个程序改成多线程的可以实现多个客户端与服务器聊天的功能。
第六题是:把这个程序改成udp协议下的程序,实现同样的功能。